我正在使用cakephp ACL组件来保证站点的安全,但问题是当我试图拒绝某个特定的动作时,例如.cake acl deny Group.3 Notes'delete',它拒绝控制器的所有动作group.aros_acos表如下---- id aro_id aco_id _create _read _update _delete 1 1 1 1 1 1 1 2 2 10 1 1 1 1 3 3 10 1 1 1 -1 在上表中,第三行aro_id指向Group 3,aco_id指向Notes控制器。
可能是什么问题。
答案 0 :(得分:1)
我目前无法访问我的实现,所以这是来自内存:
acos_aros表中的crud设置不会映射到或控制对方法/函数/操作的访问。它是表中的实际行。 Aro - >的每个排列都会有一行。您已定义的Aco - 默认情况下不一定存在。
因此管理员的条目(行):AdminUser_1 => 帖子::删除将是一堆1s, 0s or -1s
。将所有四个数字设置为1
以进行访问,或将-1
设置为拒绝。
我通过为每个组,控制器和放大器构建一个(巨大的)复选框矩阵,使这更容易。行动。
总结一下,要为用户启用删除功能:
_create, _read, _update, _delete
设为1 e.g。
(3087, 1, 1314, '1', '1', '1', '1'), // allow
(3086, 1, 1313, '-1', '-1', '-1', '-1') // deny
答案 1 :(得分:0)
自上次更改以来,您的数据库可能已损坏。
我建议你修复表,记住,这是hasMany关系加上TreeBehaviour,如果由于任何原因从控制器节点出来的动作会解释这种行为。
幸运的是,有人考虑过这一点并开发了ACL Manager插件,允许您使用控制台修复此问题。
https://github.com/FMCorz/AclManager
将插件下载到plugins文件夹。 如果您尚未加载所有插件,请将插件加载到引导程序中。 登录到您的服务器并使用控制台执行以下任何命令:
./Console/cake AclExtras.AclExtras aco_sync
您可以获得所有可用命令的完整指南:
./Console/cake AclExtras.AclExtras -h
./Console/cake AclExtras.AclExtras aco_sync -h
任何时候,如果您无法访问APP,请将Controller添加到AppController中的authorize方法,然后:$ this-> Auth-> allow(),以便任何具有有效身份验证的人都有效。
示例,只需检查:
$this->Auth->authorize = array(
'Actions' => array('actionPath' => 'controllers')
);
示例控制器和ACL检查:
$this->Auth->authorize = array(
'Controller',
'Actions' => array('actionPath' => 'controllers')
);
使用第二个选项,您可以随时在控制器的beforeFilter中添加$this->Auth->allow()
,以允许访问您想要的人。