Zend Framework 2 with zfc-rbac database population

2022-08-30 21:22:58

有许多关于如何在Zend Framework 2中实现zfc-user和zfc-rbac的“入门”教程。zfc-user 和 zfc-rbac(https://github.com/ZF-Commons)的 github 页面很清楚,实现确实非常简单(如许多教程所述)。我还发现了zfc-user和zfc-rbac都需要的SQL方案(/vendor/zf-commons/zfc-[user/rbac]/data/)。

在数据库中创建用户很容易,因为 zfc-user 已经为您设置了此设置(http://example.com/user)。到目前为止,一切都很好。现在我想填充角色,但我不清楚如何正确填充 rbac 表。缺乏这方面的信息让我感到惊讶,因为zfc-rbac组件是Zend框架的流行模块。

我了解基于角色的访问控制的原则以及权限的表的填充以及将权限和角色链接在一起的表是清楚的,对我来说不清楚的是角色表。我知道你可以有一个具有父角色的角色,但不清楚如何使用父角色填充表,因为有一个外键约束,规定“parent_role_id”必须是“role_id”。

下面是角色表的 SQL(这是 zfc-rbac 提供的 SQL):

CREATE TABLE `rbac_role` (
  `role_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_role_id` int(11) unsigned NOT NULL,
  `role_name` varchar(32) NULL,
  PRIMARY KEY (`role_id`),
  KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ALTER TABLE `rbac_role`
  ADD CONSTRAINT `rbac_role_ibfk_1` FOREIGN KEY (`parent_role_id`) REFERENCES `rbac_role` (`role_id`);

使用外键就位添加父角色似乎是不可能的?

INSERT INTO `rbac_role` (parent_role_id, role_name) VALUES (NULL, 'admin');

基本上我的问题是(我问这个问题感到非常愚蠢),但是父母角色的插入是什么样子的?如果我提供的 insert 语句实际上是正确的,我是否总是需要在插入父角色之前删除外键?


答案 1

将创建表更改为以下内容:

CREATE TABLE `rbac_role` (
    `role_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `parent_role_id` int(11) unsigned NULL,
    `role_name` varchar(32) NULL,
    PRIMARY KEY (`role_id`),
    KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

请注意,parent_role_id为 NULL 而不是 NOT NULL。如果parent_role_id不是空的,那么这意味着它必须有一个父级,但由于外键引用是针对同一个表的,因此无法插入父行!


答案 2

fyi:此问题已修复。zfc-rbac 的 0.2.0 版将允许 NULL 值作为parent_role_id


推荐