2

我为管理员特定操作创建了模块。我不想为每个控制器编写相同的访问规则,这不是很好的编码风格。

4

4 回答 4

3

模块就像一个具有分离目录结构的子应用程序。它不负责过滤或检查权限。

唯一重要的解决方案是按照 Ismael 的提议定义一个新的抽象。

class ExtendedController
{
    public function rules()
    {
        return array_merge(parent::rules(), array(
           // your rules
        ));
    }
}
于 2009-10-23T17:26:19.833 回答
3

一种解决方案是为每个经过身份验证的类扩展一个通用的 BaseClass 控制器。

这样你就可以写一次。

于 2009-10-23T10:11:45.380 回答
1

Ismael 和pesaa 选择非常好,甚至可以快速实施,但我总是推荐更强大的替代方案,如RBAC 模型。你可以在http://code.google.com/p/srbac/找到一个非常好的Yii RBAC图形用户界面

于 2009-11-18T18:13:01.217 回答
0

这对我有用:

class extendedController extends baseController
{
    public function accessRules()
    {
        return array_merge(

            // This controller's rules are added first:
            // Allow all users to call the 'hello' action.
            array(
                array('allow',
                    'actions'=>array('hello'), 
                    'users'=>array('*'),
                ),
            ),

            // BaseController rules are added last, especially
            // if the last rule in the baseController denies all
            // users that were not allowed yet.
            parent::accessRules()
        );
    }

    public function actionHello()
    {
        echo('Hello!');
    }
}
于 2014-04-29T19:33:31.173 回答