首先配置文件新增一组,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,你也可以设定其他用户组件,比如供应商,商户需要独立用户表都可以用这种方法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。