2016-12-11 33 views
0

的loggedIn我有我想检查,如果用户是在yii2做客但是代码失败,即使用户是来宾这个控制器动作是什么,我都试过Yii2检查,如果用户在yii2

class CustomerController extends Controller 
{ 

    public function beforeAction($action) 
    { 
    if(Yii::$app->user->isGuest){ 
     return $this->redirect(Yii::$app->urlManager->createUrl("site/login")); 
    } 


    public function actionDashboard(){ 
    //do dashboard stuff 
    } 

    } 

我一直在使用AccessControl的过滤器也尝试过,但他们仍然无法 这是一个前端控制器

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'controllers' => ['customer'], 
        'actions' => ['dashboard'], 
        'allow' => true, 
        'users' => ['?'], 
       ], 

      ], // rules 

     ], // access 


    ]; // return 

} // behaviors 

然后我的客户控制器我只是延长前端Controlller但即使这种方法失败的访问控制过滤器实例

BY这样做,这样

public function actionDashboard(){ 
    if(Yii::$app->user->isGuest){ 
     return $this->redirect(Yii::$app->urlManager->createUrl("site/login")); 
    }else{ 

     //perform dashboard stuff 

    } 

} 

这工作,但问题是,按照过去的方法有很多,其中犯规的其他动作重复的代码似乎是正确,即使它的工作原理

有什么不对这似乎后者的方法更好

我已经检查了This linkThis second one和implementend他们,但没有工作

什么可能是错误的。

AM using Yii2 improved advanced template 

回答

1

你读过guide了吗?详细解释如下...

在控制器中添加此方法,该方法应该对来宾隐藏。

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => \yii\filters\AccessControl::className(), 
      'rules' => [ 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
    ]; 
} 

就是这样。

具有此行为的控制器中的每个操作都只能由签名用户访问。客人自动重定向到登录页面(默认site/login)。