Yii2限制对RBAC模块本身的访问

时间:2016-08-02 17:35:50

标签: yii2 yii2-advanced-app

如何限制对RBAC模块本身的访问?

我使用yii\rbac\DbManager并在后端创建了一个模块(授权)以进行权限分配,创建auth项目,现在我想确保只有管理员可以访问此模块!

在控制器中我使用过这个并且它工作正常。

use yii\filters\AccessControl;

class MyController extends Controller
{
 public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['index', 'view', 'create', 'update', 'delete'], //only be applied to
                'rules' => [
                    [
                    'allow' => true,
                    'actions' => ['index', 'view', 'create', 'update','delete'],
                    'roles' => ['admin'],
                    ],
                 ],
            ],
  .........

我把它放在Authorization.php初始化函数中但没有任何反应,所有auth控制器都是可访问的。

public function init()
    {
        if(\Yii::$app->user->can('admin'))
            parent::init();

        // custom initialization code goes here
    }

更新

后端/配置/ main.php

'modules' => [
        'authorization' => [
            'class' => 'backend\modules\authorization\Authorization',
        ],
    ],

1 个答案:

答案 0 :(得分:2)

在您的模块类中,您可以添加此方法

public function beforeAction($action)
{
    if (!parent::beforeAction($action)) {
        return false;
    }

    if (!\Yii::$app->user->can('admin')) {
        throw new \yii\web\ForbiddenHttpException('You are not allowed to access this page.');
    }

    return true;
}