首先配置文件新增一組,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模塊
<?php
namespace app\admin\controllers;
use Yii;
use yii\web\Controller;
use yii\filters\AccessControl;
class DefaultController extends Controller
{
public function behaviors()
{
return [
'access' => [
'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,你也可以設定其他用户組件,比如供應商,商户需要獨立用户表都可以用這種方法