CakePHP ACL:是否需要基本组/ ARO

时间:2012-01-12 16:47:44

标签: cakephp acl

我正在为CakePHP应用程序(1.3.14)实现ACL组件。我已经正确设置了所有设置,但有一些区域我仍然模糊不清。

主要是,我是否需要为特殊基本用户组(ARO)明确设置权限(ACO)?

为简单起见,假设我有管理员,然后是其他所有人(一般用户)。那么我是否需要为这些一般用户创建一个组并映射其所有允许权限?似乎管理这些权利将永远不会随着应用程序的增长而结束。

另外,如何将用户分配到多个组?

理想情况下,如果某个人拥有用户帐户,Auth组件将授予对整个系统的访问权限。然后,ACL只会从受现有组保护的部分中拒绝它们。

似乎ACL和Auth的耦合太高了。但这可能是我新的(有限的)理解。任何澄清将不胜感激。

更新

我开始了赏金。总之,我想实现CakePHP ACL(最好,但可以使用匹配的第三方组件),以满足/解决以下问题:

  • 将用户分配到多个群组
  • 轻松维护“公共”用户组 - 不必经常添加普通用户可以访问的控制器/操作
  • 管理对控制器/访问的访问的代码示例
  • 正确测试用户的代码示例属于一个组。

2 个答案:

答案 0 :(得分:5)

我认为使用Cake的本机ACL实现最好的希望如下:

cake acl create aro root public
cake acl create aro root registered
cake acl create aro registered administrators

(create acos using AclExtras)

cake acl grant registered controllers
cake acl grant public controllers
cake acl deny public controllers/MySecureController
cake acl deny public controllers/Widgets update
cake acl deny public controllers/Widgets delete

(以上都是通过cake shell完成的,但很容易翻译成PHP变种)

基本上,你可以使用“默认拒绝”范例(如Cake自己的ACL教程中所示),或者如上所述使用“default-allow”范例。您选择哪种方法取决于您对应用程序增长的期望:大多数控制器是公开的,只有少数几个仅限于管理员,或者您的大多数应用程序是否会受限于公共给定的特定访问权限?无论哪种方式,您仍然需要授予或拒绝访问。

请注意在 root 下创建的两个ARO:公开已注册。使用此模型,在创建ARO树时将已注册视为 root - 将所有“真实用户”组置于其下方。这样,您可以在已注册下的对象上正常使用ACL,并且公共用户将存在于此之外。

所有这一切,没有什么能阻止你使用Cake的身份验证机制并滚动自己的访问控制方法。以下是一个示例: Simple Authentication and Authorization Application (注意:这是为CakePHP 2.0编写的,但这些概念也适用于1.3)

编辑 -

在重新阅读问题和其他回复后,我意识到您的目标更多是基于角色的访问控制模型,而不是传统的内置ACL组件的每用户模型。以下是为RBAC扩展内置auth组件的几个示例:

  

Role-based ACL in CakePHP

     

CakePHP Auth component: Users, Groups, Permissions

此外,this two-part article描述了一种可应用于Cake应用程序的数据库支持的基于角色的授权方法。

答案 1 :(得分:3)

您可以同时拥有ACO树和ARO树。在ARO树中,您将拥有adminsGroup< -usersGroup。您需要为这些组设置权限。在ACO树中,您将拥有baseACO< -subACO< -treeOfACOsForUsers。如果出现以下情况,则无需维护任何新的ACO:1)允许userGroups使用subACO,2)任何新的ACO都是subACO的子级。我们的想法是组织一个ACO树,这样如果您允许访问父级,则所有子级都可以自动访问。您也可以拥有拒绝访问的分支。因此,您需要维护(分配权限)仅靠近根的几个分支。

您可能有兴趣查看我的PoundCake Control Panel - 一个使用用户友好的Web界面实现ACL的插件(支持CakePHP v1.3)。

<强>更新

Here就是您所需要的。