2013-03-30 92 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