【问题标题】:CakePHP ACL: Is a base group/ARO requiredCakePHP ACL:是否需要基组/ARO
【发布时间】:2012-02-08 23:08:02
【问题描述】:

我正在为我的 CakePHP 应用程序 (1.3.14) 实现 ACL 组件。我的所有设置都正确,但有一些地方我仍然很模糊。

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

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

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

理想情况下,如果一个人有一个用户帐户,则 Auth 组件将授予对整个系统的访问权限。然后 ACL 会简单地拒绝它们进入受现有组保护的部分。

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

更新

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

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

【问题讨论】:

  • @bfavaretto,请注意插话。我看到你回答了几个 ACL 问题。
  • 我很高兴他们在 cake2.0 上更改了 Auth,我认为现在编写一个满足您列出的目标的组件应该不难。现在 Auth 和 ACL 完全分开了,你不需要使用 ACL =)
  • @pleasedontbelong:您可以在 CakePHP 1.2+ 中单独使用 Authentication 组件 -- 不需要 ACL。

标签: cakephp acl


【解决方案1】:

您可以同时拥有 ACO 树和 ARO 树。在 ARO 树中,您将拥有 adminsGroup

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

更新:

Here 是您所需要的。

【讨论】:

  • 这是有道理的。但我对我的具体问题仍然有点模糊。我认为答案是——我需要为我的普通用户明确设置权限。将用户分配到多个组怎么样?与此同时,我将研究 PoundCake
  • 是的,您需要为 ARO 分配权限。否则你会得到Warning (512): DbAcl::check(),就像这个问题一样:stackoverflow.com/questions/6168357/cakephp-acl-error(我已经得到了)。不过,我还没有尝试将用户分配到多个组。
  • 多个组的一种解决方案是按照此处的建议嵌套它们:cakephp.1045679.n5.nabble.com/…
【解决方案2】:

我认为使用 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 变体)

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

注意在 root 下创建的两个 ARO:publicregistered。使用此模型,在创建 ARO 树时将 已注册 视为 root - 将所有“真实用户”组放在其下。这样,您就可以在已注册下的对象上正常使用ACL,而public用户将存在于其之外。

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

编辑 -

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

Role-based ACL in CakePHP

CakePHP Auth component: Users, Groups, Permissions

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

【讨论】:

  • 这很好地解决了公共/私人访问规范。但是,多组呢?另外,您能否详细说明后者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多