動態

詳情 返回 返回

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模塊

<?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,你也可以設定其他用户組件,比如供應商,商户需要獨立用户表都可以用這種方法

Add a new 評論

Some HTML is okay.