Yii2框架基础模板使用多组用户,增加admin

首先配置文件新增一组,copy user组件即可 属性可调整

    'components' => [
        //其他...
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'admin' => [
            'class'           => 'yii\web\User',
            'identityClass'   => 'app\admin\models\Admin',
            'enableAutoLogin' => true,
            'loginUrl'        => 'admin/default/xxx',//admin的登录页
            'identityCookie'  => ['name' => '_admin_identity', 'httpOnly' => true],
            //这5个项目必须配置 否则会和user登录状态发生冲突
            'idParam'                   => '__admin_id',
            'authKeyParam'              => '__admin_authKey',
            'authTimeoutParam'          => '__admin_expire',
            'absoluteAuthTimeoutParam'  => '__admin_absoluteExpire',
            'returnUrlParam'            => '__admin_returnUrl',
        ],

在控制器,假设我们增加了一个admin模块

 [
                'class' => AccessControl::className(),
                /*
                 * 这里的user必须要指定 components 里的后台用户组组件名称admin
                 * 否则默认会判断前台用户组user
                 * 如果你取了其他名字就填写你自定义的名字
                */
                'user'  => 'admin',
                'only'  => ['index', 'signup'],
                'rules' => [
                    [//不需要登录就可以访问的方法
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [//必须登录才可以访问的方法
                        'allow' => true,
                        'actions' => ['index'],
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }


    public function actionIndex()
    {
        if( Yii::$app->admin->isGuest ){
            return 'admin没有登陆,如果设置了AccessControl,其实压根访问不到这里就会被重定向到管理员登陆界面';
        }

        $identity = Yii::$app->admin->identity;
    
        return 'Your username : ' . $identity->username;
    }

    //admin登录 真实业务代码会复杂一些
    public function actionLogin()
    {
        $identity = \app\admin\models\Admin::findByUsername('demo');
        return Yii::$app->admin->login($identity) ? 'admin登陆成功' : '登陆失败' ;
    }
    
    //admin退出
    public function actionLogout()
    {
        return Yii::$app->admin->logout() ? 'admin 登出成功' : '登出失败' ;
    }
}

除了admin,你也可以设定其他用户组件,比如供应商,商户需要独立用户表都可以用这种方法

你可能感兴趣的:(yii2)