Yii2 Advanced - 让后端使用 'admin' table 和 'Admin' 模型

Yii2 Advanced - Make backend use 'admin' table and 'Admin' model

我正在尝试像传统 user/admin 系统一样设置高级 Yii2。前端将是 /user,后端将是 /admin,并将在数据库(用户和管理员)中使用它们各自的 table。我还没有将前端和后端重命名为用户和管理员..

使用迁移生成了 'user' table,其中包含所有字段。我注册了一个新用户,一切正常。然后我复制了 'user' table 并将其命名为 'admin',并将用户名更改为 admin。我可以更改密码或截断密码,注册新的管理员用户,然后稍后从后端删除注册。数据库中的管理员 table 本身不是问题,因为当我遇到错误时我还没有走那么远..

我已经在它的前端(用户)端安装并使用了 Yii2 advanced。当然,你有 Yii::$app->user 并且它在前端工作得很好。我可以登录,它使用'users' table。前端很好用...

现在在后端(管理员)我需要它来使用 'admin' table。我知道您指定了要在模型中使用的 table。我复制了 /common/models/User.php 并拥有 /common/models/Admin.php 并更新了函数以使用 'admin' table 代替。

我也复制了 /vendor/yiisoft/yii2/web/User.php 并把它放在 /common/models/web/Admin.php 中(并将 class 的名称从 User 重命名为 Admin )

然后我编辑了 /backend/config/main.php 以反映 Admin(class 和 identityClass)的变化。


/backend/config/main.php

'components' => [
    'admin' => [
        'identityClass' => 'common\models\Admin',
        'class' => 'common\models\web\Admin',
        'enableAutoLogin' => true,
    ],
],

/common/models/web/Admin.php

class Admin extends Component { ... }

/common/models/Admin.php

class Admin extends ActiveRecord implements IdentityInterface {
    public static function tableName()
    {
        return '{{%admin}}';
    }
}

错误: User::identityClass must be set. <-- 如您所见,它仍然以某种方式引用用户模型...

另外,当我得到这个设置时,我会使用 Yii::$app->admin 而不是 Yii::$app->user 吗?比如检查他们是否使用 isGuest 登录。

我想确定用户无法登录前端,然后手动转到后端并登录!

我已经解决了:)

您必须编辑每个(前端和后端)的主要配置并为用户组件指定 'identityClass',并将 'session' 和 'request' 添加到列表中。

前端配置示例:

'components' => [
    'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_frontendUser', // unique for frontend
        ]
    ],
    'session' => [
        'name' => 'PHPFRONTSESSID',
        'savePath' => sys_get_temp_dir(),
    ],
    'request' => [
        // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
        'cookieValidationKey' => '[RANDOM KEY HERE]',
        'csrfParam' => '_frontendCSRF',
    ],
],

后端配置示例:

'components' => [
    'user' => [
        'identityClass' => 'common\models\Admin',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_backendUser', // unique for backend
        ]
    ],
    'session' => [
        'name' => 'PHPBACKSESSID',
        'savePath' => sys_get_temp_dir(),
    ],
    'request' => [
        // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
        'cookieValidationKey' => '[DIFFERENT UNIQUE KEY]',
        'csrfParam' => '_backendCSRF',
    ],
],

如需更详细的指南,您可以阅读我创建的 wiki。

维基:[Guide] How to actually separate Frontend and Backend on Yii2 Advanced