我正在使用Yii2 Advance应用程序,我是yii2的新手,所以如何制作
所有yii2控制器不允许在没有登录的情况下执行操作,或者客人必须登录
我的意思是如果用户没有登录就无法登录控制器,所以在登录页面重定向这不是一个控制器我需要很多控制器
答案 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' => ['?'],
],
],
],
];
}
}
当然,你所有的控制器都应该扩展这个。
答案 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 {
...
}
}
希望这有帮助。