19

有许多关于如何在 Zend Framework 2 中实现 zfc-user 和 zfc-rbac 的“入门”教程。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 框架的一个流行模块。

我了解基于角色的访问控制的原理,并且权限表的填充以及将权限和角色链接在一起的表很清楚,我不清楚的是角色表。我知道您可以拥有一个具有父角色的角色,但不清楚如何使用父角色填充表,因为有一个外键约束指出“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');

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

4

2 回答 2

1

仅供参考:此问题已修复。zfc-rbac 0.2.0 版将允许 NULL 值作为 parent_role_id

于 2013-06-19T06:04:09.137 回答
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;

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

于 2013-05-25T16:46:20.137 回答