Yii2所有控制器和动作都需要登录,需要添加一些例外。我该怎么办?

时间:2017-11-10 12:48:10

标签: yii2 access-control rules

我找到了很多关于如何创建需要登录所有控制器和操作的访问控制的答案。

以下帖子显示了我如何让所有控制器都需要登录:

Yii2 require all Controller and Action to login

我在我的组件下使用了以下代码:

'as beforeRequest' => [
    'class' => 'yii\filters\AccessControl',
    'rules' => [
        [
            'allow' => true,
            'actions' => ['login', 'error'],
        ],
        [
            'allow' => true,
            'roles' => ['@'],
        ],
    ]
],

但是,我想添加一些例外。某些控制器需要对Guest显示一些操作。

我试图在ReportsController上的行为中使用此代码:

'access' => [
            'class' => AccessControl::className(),                          
            'rules' => [                                
                [
                    'allow' => true,
                    'actions' => ['share'],
                    'roles' => ['?'],
                ],
            ],                  
        ]

仍然被重定向到登录。

我正在尝试向客人公开actionShare($ param){}。

我错过了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先执行

  

yii migrate --migrationPath = @ yii / rbac / migrations

从命令提示符

在数据库中创建RBAC表。

然后在组件文件夹

中创建RbacController
 use app\components\RbacController;

 class AdminController extends RbacController
 {   
 public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                // [
                //     'actions' => ['login', 'logout'],
                //     'allow' => true,
                //     'roles' => ['?'],
                // ],
                parent::RbacRule(),
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
                'bulk-delete' => ['post'],
            ],
        ],
    ];
}
.......
}

然后使用此RbacController而不是控制器扩展到您的控制器。

{{1}}
  

如果您的控制器在Modules文件夹中,那么您必须使用   parent :: RbacRule(TRUE)而不是parent :: RbacRule(),