最近在用Yii2.0做項目,其中需要實現一個功能:沒有登錄不能訪問部分頁面,即遊客身份訪問限制。查了半天資料,終於找到答案。解決方法如下:
在access裏,access即訪問的意思,其中有個配置項 ‘only’=>['login','about'] 這是什麼意思呢,意思是僅僅在login、about兩個action內起作用,即當action
是login、about時,會進入rules裏做下一步驗證。
但是 我們想除了登錄、註冊以外其他action均不允許訪問怎麼辦呢?還有其他的配置,我們把only 改成 except,什麼意思呢,是除去什麼什麼之外的意思,就是
說對除了 login、signup以外的action起作用。接下來,在rules=>[['action'=>['login','signup'],'allow'=>true,'roles'=>['?']]] 裏,rules就是規則,這裏邊可以寫
多條,actions是指規則針對哪個action,allow指是否允許訪問,'roles'這個字段是關鍵的,這是允許訪問的角色。其中?代表遊客,@代表已登錄的用戶。
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'except' =>['login','signup'], 'rules' => [ [ 'actions' => ['login','signup'], 'allow' => true, 'roles' => ['?'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'logout' => ['post'], ], ], ]; }