2011-09-09 26 views
2

我已经继承了一个应用程序,该应用程序大量使用Cake的ACL - 我从未使用过的组件 - 并且配置为使得3组ARO可以访问整个控制器。 ACO存在于控制器中的每个操作,但没有权限在操作级别明确分配。ACL是否允许所有,但拒绝一个?

我现在遇到了一种情况,我需要一个组访问某个特定方法,但我需要拒绝其他两个组。有没有办法,而不是明确分配每个组的权限到每个操作,只需指出2组而不是对有问题的一个操作有权限?基本上,我想保持当前“访问所有内容”的默认设置,但用“拒绝[此特定操作]”覆盖该内容。我试过cake bake acl deny GroupName ControllerName actionName,但这似乎没有任何影响。

通过一个相当无处不在的比喻,我希望这表现得像Apache的AllowOverride。默认情况下,允许所有人都可以,但是拒绝给定组的特定操作。我不确定这是否有帮助,但它是有用的。

谢谢。

回答

0

该命令将授予您所有的ARO访问您的ACO cake acl grant RootGroupName RootControllerName all

此后你可以指定你想拒绝访问特定的动作:cake acl deny GroupName ControllerName|AcoActionName AcoActionName|permissions

如果你的第二个否定之后,价值是一个AcoActionName你将不得不使用权限下列值之一:all, create, read, update, delete

小切:

这是我认为的混乱可能会撒谎。您的 ACL [ACOs和ARO]的结构通常与您的控制器/操作设置的 结构匹配,但由于在每个操作中检查权限,因此可以调用您想要的任何名称 。在 Tree (data structure)中组织的CakePHP ACL和外部节点可以设置数据库级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

相关问题