繁体   English   中英

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

[英]CakePHP ACL: Optional ACO Node (allow by default)

我正在使用数据库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设置为“控制器”。

也许有更好的解决方案?

我希望我已经充分说明了我的问题,如果没有的话,我将确保澄清。

谢谢!

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

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

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

我建议您为所有用户创建一个超级用户,允许他访问所有ACO节点,但是拒绝特定的ACO节点。 因此,所有用户都将从该抽象超级用户那里继承权限。 我想您已经学习了Simple Acl控制的应用程序教程 ,不是吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM