ACL可以允许所有,但拒绝一个?

时间:2011-09-09 16:45:19

标签: cakephp cakephp-1.2

我继承了一个大量使用Cake的ACL的应用程序 - 一个我从未使用过的组件 - 并且配置为3组ARO可以访问整个控制器。控制器中的每个操作都存在ACO,但在操作级别没有明确分配任何权限。

我现在遇到一种情况,我需要一个组才能访问一个特定方法,但我需要为其他两个组拒绝它。有没有办法,而不是明确地为每个操作分配每个组的权限,只是表明的2个组是否拥有相关操作的权限?

基本上,我想保持当前“访问所有内容”的默认值,但是使用“拒绝[此特定操作]”来覆盖它。我试过cake bake acl deny GroupName ControllerName actionName,但这似乎没有任何影响。

通过一种相当无处不在的类比,我希望它的行为类似于Apache的AllowOverride。默认情况下,允许所有人使用所有内容,但拒绝给定组的给定操作。我不确定这是否有用,但确实如此。

感谢。

1 个答案:

答案 0 :(得分:0)

此命令将授予您所有ARO访问您的ACO cake acl grant RootGroupName RootControllerName all的权限。

此后,您可以指定要拒绝访问的特定操作:cake acl deny GroupName ControllerName|AcoActionName AcoActionName|permissions

如果拒绝后的第二个值是AcoActionName,则必须使用以下值之一进行权限:all, create, read, update, delete

  

小切线:

     

这是我认为可能存在混淆的地方。你的结构   ACL [ACO和ARO]只是通常与之匹配的节点的名称   控制器/动作设置的结构,但可以称为任何名称   您希望自己在每个操作中检查权限。 CakePHP ACL组织在一个   Tree (data structure)和外部节点可以设置数据库级CRUD权限。

以下是用户和评论的ACL架构示例。

Aco tree:
---------------------------------------------------------------
  [1] controllers (root node)
    [2] Comments
      [3] edit
      [4] add
      [5] delete
---------------------------------------------------------------

Aro tree:
---------------------------------------------------------------
  [1] Groups (root node)
    [2] Users
    [3] Admin

---------------------------------------------------------------

假设已全局授予访问权限,则所有请求者都可以访问所有对象。如果您希望拒绝用户在提交评论后能够对其进行修改,则可以运行cake acl deny Users Comments edit

这是一个很棒的ACL教程,特别是最后的App_Controller代码,它有一个很好的片段,可以检查与控制器/动作匹配的ACO结构的权限:User Permissions and CakePHP ACL

此外,CakePHP Book有一个很好的代码片段可以将所有控制器/操作作为ACO规则插入:An Automatic Tool for Creating ACOs