【问题标题】:CakePHP ACL: Optional ACO Node (allow by default)CakePHP ACL:可选的 ACO 节点(默认允许)
【发布时间】:2011-09-15 19:48:00
【问题描述】:

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

或者也许有更好的方法?

我希望我已经充分表达了我的问题,如果没有,我会确保澄清。

谢谢!

【问题讨论】:

    标签: php cakephp permissions acl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        我建议您为所有用户创建一个超级用户,允许他访问所有 ACO 节点,但拒绝特定 ACO 节点。因此,所有用户都将从该抽象超级用户那里继承权限。估计你学过Simple Acl controlled Application tutorial吧?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-16
          • 1970-01-01
          • 2016-10-21
          相关资源
          最近更新 更多