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
我正在尝试像传统 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