2013-03-30 29 views
10

有许多“入门”的教程在那里就如何落实ZFC用户和ZFC-RBAC到Zend框架2. ZFC-用户和ZFC-RBAC GitHub的页面( https://github.com/ZF-Commons)很清楚,实现确实很简单(正如许多教程中所述)。我还找到了zfc-user和zfc-rbac(/ vendor/zf-commons/zfc- [user/rbac]/data /)所需的SQL方案。Zend框架2 ZFC-RBAC数据库人口

用户进入数据库的建立是很容易的,因为ZFC-用户已经设置此为您(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'); 

基本上我的问题是(并且我对此感到非常愚蠢),但是如何为父角色插入一个样子?如果我提出的插入语句实际上是正确的,我是否总是需要在插入父角色之前删除外键?

+8

我对SQL专家,但这种自我引用的关联似乎是假的。 parent_role_id必须被允许为NULL,否则你将永远无法插入第一个数据行。 – Sam

+0

同意@Sam,'parent_role_id'应该可以为空 – Crisp

+0

这就是我的想法。谢谢。奇怪的是,zfc-rbac提供了create table语句与外键,他们应该解释更多或者不要,因为这有点令人困惑。 –

回答

0

更改创建表如下:

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是空的,而不是NOT NULL。如果parent_role_id不是NULL,那意味着它必须有一个父项,但由于外键引用是同一个表,因此无法插入父行!

0

FYI:此问题已得到解决。 ZFC-RBAC的版本0.2.0将允许NULL值parent_role_id