CakePHP ACL数据库设置:ARO / ACO结构?
-
CakePHP 的内置 ACL 系统非常强大,但在实际实现细节方面的文档却很少。我们在许多基于 CakePHP 的项目中成功使用的系统如下所示。
这是对其他地方记录 的一些组级访问系统的修改。我们系统的目标是建立一个简单的系统,用户在组级别上获得授权,但他们可以对他们创建的项目或每个用户拥有特定的附加权限。我们希望避免必须为表中的每个用户(或者,更具体地说,为每个 ARO)创建一个特定条目
aros_acos
。我们有一个用户表和一个角色表。
用户
user_id, user_name, role_id
角色
id, role_name
为每个角色创建 ARO 树(我们通常有 4 个角色 - 未授权访客 (id 1)、授权用户 (id 2)、站点管理员 (id 3) 和管理员 (id 4)):
cake acl create aro / Role.1
cake acl create aro 1 Role.2 ... etc ...
在此之后,您必须使用 SQL 或 phpMyAdmin 或类似工具为所有这些添加别名,因为 cake 命令行工具不会这样做。我们为所有人使用“角色-{id}”和“用户-{id}”。
然后我们创建一个 ROOT ACO -
cake acl create aco / 'ROOT'
然后为该 ROOT 下的所有控制器创建 ACO:
cake acl create aco 'ROOT' 'MyController' ... etc ...
到目前为止一切正常。我们在名为 aros_acos 的表中添加了一个附加字段
_editown
,我们可以将其用作 ACL 组件的 actionMap 中的附加操作。CREATE TABLE IF NOT EXISTS `aros_acos` ( `id` int(11) NOT NULL auto_increment, `aro_id` int(11) default NULL, `aco_id` int(11) default NULL, `_create` int(11) NOT NULL default '0', `_read` int(11) NOT NULL default '0', `_update` int(11) NOT NULL default '0', `_delete` int(11) NOT NULL default '0', `_editown` int(11) NOT NULL default '0', PRIMARY KEY (`id`), KEY `acl` (`aro_id`,`aco_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
发表回复