[英]How to integrate Yeesoft/Yii2 cms RBAC (Role Based Access Control) with YII2 frontend RBAC?
[英]yii2 redirect based on access role to change password page
我在Yii2應用程序中設置了基於角色的簡單訪問,其工作方式如下:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'ruleConfig' => [
'class' => AccessRule::className(),
],
'only' => ['logout', 'contact', 'change-password'],
'rules' => [
[
'actions' => ['login'],
'allow' => true,
'roles' => ['?'],
],
[
'actions' => ['logout', 'contact', 'change-password'],
'allow' => true,
'roles' => [
User::ROLE_USER,
User::ROLE_ADMIN
],
],
[
'actions' => ['logout', 'change-password'],
'allow' => true,
'roles' => [
User::ROLE_NEW_USER
],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
當用戶未登錄時,嘗試訪問注銷,聯系或更改密碼頁面將重定向到登錄頁面。 我還希望進行配置,以便始終將角色為ROLE_NEW_USER的用戶重定向到更改密碼頁面,直到其狀態更改為止(更改密碼后,數據庫中的狀態也會更新)。
是否可以通過denyCallback做到這一點,或者是否可以使用重定向到登錄頁面來重定向到其他頁面?
如文檔中所示:
訪問規則支持許多選項。 您也可以擴展yii \\ filters \\ AccessRule來創建自己的自定義訪問規則類 。
這使您可以創建一個自定義規則,以檢查用戶是否尚未更改密碼並重定向到所需的位置
好吧,經過一番摸索之后,我設法使其與beforeAction()函數一起工作:
public function beforeAction($action)
{
if (Url::current() != Url::toRoute('site/change-password')
&& isset(Yii::$app->user->getIdentity()->role)
&& Yii::$app->user->getIdentity()->role == User::ROLE_NEW_USER) {
return Yii::$app->getResponse()->redirect(Url::toRoute('site/change-password'));
}
if (!parent::beforeAction($action)) {
return false;
}
return true;
}
確保包含Url :: current()!= Url :: toRoute('site / change-password'),否則您將陷入重定向循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.