Zend Framework 2使用zfc-rbac数据库填充

Len*_*ijl 12 php zend-framework2

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

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

我理解基于角色的访问控制的原理和权限表的填充以及将权限和角色链接在一起的表是清楚的,这是我不清楚的角色表.我知道您可以拥有一个具有父角色的角色,但是不清楚如何使用父角色填充表,因为存在一个外键约束,该约束声明'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`);
Run Code Online (Sandbox Code Playgroud)

使用外键添加父角色似乎不可能?

INSERT INTO `rbac_role` (parent_role_id, role_name) VALUES (NULL, 'admin');
Run Code Online (Sandbox Code Playgroud)

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

chr*_*don 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;
Run Code Online (Sandbox Code Playgroud)

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