使用auth扩展的模块范围访问控制

时间:2013-04-02 07:12:02

标签: authentication yii access-control

我正在使用auth扩展程序进行用户访问控制。我有几个模块,每个模块有几个控制器。我想以模块化的方式控制访问。我尝试将操作添加为moduleId.*,但在尝试访问模块中的任何控制器时出现 401 Access denied 错误。我目前的解决方案是为每个控制器添加一个操作moduleId.controllerId.*,并将这些操作组合成每个模块的任务。有没有更好的方法来添加模块范围的访问控制?

1 个答案:

答案 0 :(得分:2)

模块范围控制的实施不存在。我按如下方式更改了/auth/filters/AuthFilter.php文件:

protected function preFilter($filterChain)
{
    $itemName = '';
    $controller = $filterChain->controller;

    if (($module = $controller->getModule()) !== null){
        $itemName=str_replace('/','.',$module->getId()).'.';//for nested modules
        if (Yii::app()->user->checkAccess($itemName . '*')) return true;//Added this
    }

    $itemName .= $controller->getId();
    ...

修改

Github repository的最新代码有此修复程序。