CakePHP 通过组名而不是 ID 检查权限

Posted

技术标签:

【中文标题】CakePHP 通过组名而不是 ID 检查权限【英文标题】:CakePHP check permission by group name instead of ID 【发布时间】:2014-06-25 16:01:05 【问题描述】:

我正在使用 Cakephp 2.5.2,我想做一个 ACL 检查是否允许用户使用所需的 aco。 这可以通过组名而不是 groupID 来检查吗?

if ($this->Acl->check(array('model' => 'Group', 'name' => $aroName), $aco)) 

当我使用它时,CakePHP 给我一个错误,它找不到节点。

【问题讨论】:

【参考方案1】:

从API,check 方法接受:

string|array|Model $ref 可选 null

Array with 'model' and 'foreign_key', model object, or string value

你可以尝试通过名称找到组对象,然后将其传递给Acl->check

编辑:

    $this->loadModel('Group');
    $this->Group->recursive = -1;
    $node = $this->Group->findByName('Admin');
    CakeLog::write('debug',json_encode($this->Acl->check($node,'Users')));

【讨论】:

这就是我在我的问题示例中展示的内容。这对我不起作用。 你没有传递一个模型对象只是一个数组:在 AclNode.php 行 130 130: elseif (is_object($ref) && $ref instanceof Model) 131: $ref = array(' model' => $ref->name, 'foreign_key' => $ref->id); 你能举个例子说明如何将对象传递给它吗? 更新了答案,我已经在 AppController.php 的 beforeFilter 中尝试了以下内容,只要您可以加载必要的东西,它应该可以在任何地方工作(尝试 ClassRegistry::init('Group'); 如果你不能使用 loadModel() )

以上是关于CakePHP 通过组名而不是 ID 检查权限的主要内容,如果未能解决你的问题,请参考以下文章

Acl-cakePHP 中组的通用权限

CakePhp ACL 权限

在过程宏中,如何检查字符串是不是是有效的变量名而不是关键字?

java中可以根据线程名而不是id获得想要的线程吗

CakePHP 通过 slug 而不是 ID 过滤列表

在加载页面 cakephp 时检查字段天气是不是过期