CakePHP ACL:可选的ACO节点(默认允许)

时间:2011-06-15 19:21:33

标签: php cakephp permissions acl

我正在使用修改后的数据库ACL制作CakePHP应用程序。

为了避免为每个控制器创建ACO节点,我想建立一个系统,允许用户访问页面,除非另有拒绝。这意味着除非绝对必要,否则我不想为控制器创建ACO节点。

通常情况下,如果我无法创建ACO节点,当我的isAuthorised()函数执行$this->Acl->check时,我会收到错误,例如...

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check.  Node references:
Aro: Array
(
    [model] => Role
    [foreign_key] => 1
)

我认为一个可行的解决方案是在执行$this->Acl->check命令之前检查ACO节点是否存在。如果它不存在,则可以阻止它检查权限。

有没有办法根据$this->Auth->action()的输出(输出类似controllers/Members/Edit的内容)检查ACO节点是否存在?

我的Auth ActionPath设置为'controllers'。

或许还有更好的方法可以解决这个问题?

我希望我已充分说明了我的问题,如果没有,我会尽力澄清。

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用this检查Aco是否存在。

if($this->Acl->Aco->node('controllers/Members/Edit')) {
    debug('Aco exists!');
}

答案 1 :(得分:0)

如果要使用ACL组件,则必须具有ARO和ACO树。否则就没有意义使用该组件。

我建议您为所有用户创建一个超级用户,允许他访问所有ACO节点,但拒绝特定的ACO节点。因此,所有用户都将继承该抽象超级用户的权限。我猜你已经研究过Simple Acl controlled Application tutorial,不是吗?

另一种选择是使用Auth组件并编写自己的权限处理组件。有许多教程如何构建管理面板。

答案 2 :(得分:0)

通过编辑核心ACL.php文件来解决这个问题,没有正常的解决方案。