我继承了一个大量使用Cake的ACL的应用程序 - 一个我从未使用过的组件 - 并且配置为3组ARO可以访问整个控制器。控制器中的每个操作都存在ACO,但在操作级别没有明确分配任何权限。
我现在遇到一种情况,我需要一个组才能访问一个特定方法,但我需要为其他两个组拒绝它。有没有办法,而不是明确地为每个操作分配每个组的权限,只是表明不的2个组是否拥有相关操作的权限?
基本上,我想保持当前“访问所有内容”的默认值,但是使用“拒绝[此特定操作]”来覆盖它。我试过cake bake acl deny GroupName ControllerName actionName
,但这似乎没有任何影响。
通过一种相当无处不在的类比,我希望它的行为类似于Apache的AllowOverride
。默认情况下,允许所有人使用所有内容,但拒绝给定组的给定操作。我不确定这是否有用,但确实如此。
感谢。
答案 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