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