简体   繁体   English

如何仅访问一个特定页面YII2(高级模板)?

[英]How to access only one specific page YII2 (Advanced Template)?

I have a special case for the user in my project. 我在我的项目中为用户提供了一种特殊情况。 if user's subscription is expired (I check this in login action ), he will be redirected to his profile to edit some choices. 如果用户的订阅已过期(我在login action对此进行了检查),他将被重定向到其profile以编辑一些选择。 How can I prevent him from access any page except his profile . 如何阻止他访问除他的profile以外的任何页面。 This is my code in login action 这是我login action代码

 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]);

                    }

                }

You can use use AccessControl in your controller 您可以在控制器中使用use 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'],
                ],
            ],
        ];
    }

see this guide for more http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html 有关更多信息,请参阅本指南http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html

and in the related actionView 并在相关的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),
      ]);
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM