2016-03-04 66 views
1

我在我的项目中为用户提供了一个特例。如果用户的订阅已过期(我在login action中查看),他将被重定向到他的profile以编辑一些选择。我如何防止他访问除他的profile之外的任何页面。这是我在login action如何只访问一个特定页面YII2(高级模板)?

if($subPaymentType == 'free'){ 
        $subHours = $data[0]['sub_hours']; 

        $minutes = $subHours * 60 * 60; 
        $start_time = date('d-m-Y H:i:s', $startDate); 
        $endDate = $minutes + strtotime($start_time); 
        $endDate = date('d-m-Y H:i:s', $endDate); 

        if(strtotime(date('d-m-Y:')) < strtotime($endDate)){ 
         $model->login(); 
        }else{ 
         $model->login(); 
         //User can access this only page only 
         return $this->redirect(['user/view/?id='.Yii::$app->user->id]); 

        } 

       } 

回答

2

代码,你可以使用使用AccessControl的在你的控制器

yii\filters\AccessControl; 



class YourSiteController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'rules' => [ 
        [ 
         'actions' => ['login','profile'], 
         'allow' => true, 
         'roles' => ['*'], 
        ], 
        // allow authenticated users 
        [ 
         'allow' => true, 
         'roles' => ['@'], 
        ], 
       ], 
      ],   
      'verbs' => [ 
       'class' => VerbFilter::className(), 
       'actions' => [ 
        'delete' => ['post'], 
       ], 
      ], 
     ]; 
    } 

请参阅本指南的详细http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html

,并在相关的actionView

public function actionView($id) 
{ 
    if ($id != Yii::$app->user->id){ 
    // not allowed ... perform the action you need in this case 
    } else { 
     return $this->render('view', [ 
      'model' => $this->findModel($id), 
     ]); 
    } 
}