2011-06-15 95 views
0

我正在使用数据库ACL的修改版本制作CakePHP应用程序。CakePHP ACL:可选ACO节点(默认情况下为允许)

为了避免必须为每个控制器创建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'。

或者也许有更好的方法去做呢?

我希望我已经充分说出了我的问题,我会保证澄清,如果没有。

谢谢!

回答

0

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

0

如果你想使用ACL组件,你必须有ARO和ACO树。否则,使用该组件是没有意义的。

我建议你为所有用户创建一个超级用户,允许他访问所有的ACO节点,但是拒绝特定的ACO节点。所以,所有用户都会继承该抽象超级用户的权限。我想你已经学习了Simple Acl controlled Application tutorial,不是吗?

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

3

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

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

此答案中的语法错误,未关闭')';请改正。 – Dariusz 2013-10-02 08:46:14

相关问题