Php Zend Framework 2与zfc rbac数据库填充

Php Zend Framework 2与zfc rbac数据库填充,php,zend-framework2,Php,Zend Framework2,关于如何在Zend Framework 2中实现zfc用户和zfc rbac,有很多“入门”教程。zfc用户和zfc rbac()的github页面非常清晰,实现起来确实非常简单(如许多教程中所述)。我还找到了zfc用户和zfc rbac都需要的SQL方案(/vendor/zf commons/zfc-[user/rbac]/data/) 在数据库中创建用户很容易,因为zfc用户已经为您设置了它()。到目前为止一切都很好。现在我想填充角色,但不清楚如何正确填充rbac表。关于这方面的信息的缺乏让

关于如何在Zend Framework 2中实现zfc用户和zfc rbac,有很多“入门”教程。zfc用户和zfc rbac()的github页面非常清晰,实现起来确实非常简单(如许多教程中所述)。我还找到了zfc用户和zfc rbac都需要的SQL方案(/vendor/zf commons/zfc-[user/rbac]/data/)

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

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

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

外键就位后,添加父角色似乎不可能

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

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

将create table更改为以下内容:

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;

请注意,父角色id为NULL而不是NOTNULL。如果parent_role_id不为NULL,则意味着它必须有一个parent,但由于外键引用指向同一个表,因此无法插入父行

供参考:此问题已修复。zfc rbac的0.2.0版将允许空值作为父角色id

我不是SQL方面的专家,但这种自引用关联似乎是错误的。必须允许
parent\u role\u id
NULL
,否则您将永远无法插入第一个数据行。同意@Sam,
parent\u role\u id
应该为NULL这就是我的想法。非常感谢。奇怪的是,虽然zfc rbac为create table语句提供了该外键,但他们应该对此进行更多解释,或者忽略它,因为这有点令人困惑。已经为此发出了一个pull请求。当然,这是一个被忽视的错误。Zf Commons贡献者也是犯错误的普通开发人员:)
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;