使用Auth-> authorize =“actions”检查组不是用户的权限

时间:2010-08-05 10:17:41

标签: cakephp authorization cakephp-1.3 authorize

任何人都可以向我解释Auth->authorize = "actions"的工作情况 在我的项目中,我计划给出这个。
正如this告诉我的那样,授权会调用$this->Aro->check($user,"controllers/:controller/:action")

这会检查用户对吗?? 这意味着用户应该在aros表中 但我不需要这个来检查用户,但我需要检查组 我怎么能做到这一点。

现在当用户不在Aro表中时显示

因此,Aro将只是组,并且需要向Aros添加用户

提前谢谢

2 个答案:

答案 0 :(得分:1)

得到解决方案
使用此reference
我将AuthComponent扩展到CustomAuth并覆盖AuthComponent中的isAutorized()方法,如下所示

in controllers / components / custom_auth.php

    <?php
App::import('Component','Auth');
class CustomAuthComponent extends AuthComponent {

    public function isAuthorized($type = null, $object = null, $user = null) {

        $actions  = $this->__authType($type);
        if( $actions['type'] != 'actions' ){
            return parent::isAuthorized($type, $object, $user);
        }
        if (empty($user) && !$this->user()) {
            return false;
        } elseif (empty($user)) {
            $user = $this->user();
        }


        $group = array('model' => 'Group','foreign_key' =>$user['Login']['group_id']);
        $valid = $this->Acl->check($group, $this->action());
        return $valid;
    }
}
?>
在app_controller.php中

function beforeFilter()
{
$this->CustomAuth->userModel = 'Login';
$this->CustomAuth->allowedActions = array('display');
$this->CustomAuth->actionPath = 'controllers/';
$this->CustomAuth->authorize = 'actions';
}

这解决了我的问题:)

答案 1 :(得分:0)

看看这个chapter。要检查组权限,请执行此操作('model'和'foreign_key'值来自aros表):

$this->Acl->check(
     array('model' => 'Group', 'foreign_key' => 2),
    'controller/action'
);