所有Yii2控制器都不允许在没有登录的情况下执

时间:2016-05-11 13:02:41

标签: yii2

我正在使用Yii2 Advance应用程序,我是yii2的新手,所以如何制作

  

所有yii2控制器不允许在没有登录的情况下执行操作,或者客人必须登录

我的意思是如果用户没有登录就无法登录控制器,所以在登录页面重定向这不是一个控制器我需要很多控制器

4 个答案:

答案 0 :(得分:5)

您需要在组件部分之后在common / main.php中添加以下代码。

'as beforeRequest' => [  //if guest user access site so, redirect to login page.
        'class' => 'yii\filters\AccessControl',
        'rules' => [
            [
                'actions' => ['login', 'error'],
                'allow' => true,
            ],
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],

答案 1 :(得分:2)

你可以简单地为此创建一个超级控制器:

class Controller extends \yii\web\Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => false,
                        'roles' => ['?'],
                    ],
                ],
            ],
        ];
    }
}

当然,你所有的控制器都应该扩展这个。

详细了解Access Control Filter

答案 2 :(得分:0)

使用RBAC Manager for Yii 2您可以轻松管理用户授权。 https://github.com/mdmsoft/yii2-admin

答案 3 :(得分:0)

您可以从yii Controller类继承,您可以在其中覆盖beforeAction方法,如果没有活动的登录会话,您可以在该功能中重定向用户。 确保您使用的所有其他控制器都继承自新控制器类。

修改

在SuperController beforeAction中你可以检查当前的呼叫是否是你的站点/索引,如果没有,那么重定向到那里:

if($action->controller != "site" && $action->id != "index" ) {
  $this->goHome();
}

确保goHome()将您带到您的网站/索引。

并且您可以将Site actionIndex()方法拆分为经过身份验证或不兼容的部分:

public function actionIndex() {
    if(Yii::$app->user->isGuest) {
        return $this->redirect(Url::toRoute('site/login'));
    }
    else {
        ...
    }
}

希望这有帮助。