有许多关于如何在Zend Framework2中实现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 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`);有了外键,添加父角色似乎是不可能的?
INSERT INTO `rbac_role` (parent_role_id, role_name) VALUES (NULL, 'admin');基本上我的问题是(我觉得问这个问题很愚蠢),但是父角色的插入看起来是什么样子呢?如果我提供的insert语句实际上是正确的,那么在插入父角色之前,我是否总是需要删除外键?
发布于 2013-05-26 00:46:20
将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;请注意,parent_role_id是NULL而不是NOT NULL。如果parent_role_id不为NULL,那么这意味着它必须有一个父行,但是由于外键引用指向同一个表,因此无法插入父行!
发布于 2013-06-19 14:04:09
仅供参考:此问题已修复。版本0.2.0的zfc-rbac将允许空值作为parent_role_id
https://stackoverflow.com/questions/15718280
复制相似问题