我开发了一个有两个不同注册的网站,我有2个不同的表,我使用RbacDB,并且在组件部分的web配置中我有用户配置,根据这个我想知道如何使用2个不同配置文件中的字段?
config:
UnauthorizedAccessException
当我这样做时,显示此错误 enter image description here
谢谢!
答案 0 :(得分:6)
尝试在user-two组件中设置class属性:
'user-two' => [
'class' => 'yii\web\User'
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
或创建从yii \ web \ User类继承的新类,并设置如下:
'user-two' => [
'class' => 'app\models\NewClassInheritedFromUserClass'
....
]
也许这会对你有帮助。
答案 1 :(得分:0)
您必须为第二个身份
创建一个Web用户类namespace app\components;
class UserTwo extends \yii\web\User{
}
而不是在配置中指定类名
'user-two' => [
'class'=> 'app\components\UserTwo'
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
答案 2 :(得分:0)
我已经完成了yii2框架内部。据我了解,您可以按照以下技术制作N个身份;
如果您不想实施复杂RBAC(基于角色的访问控制)并且只想在控制器的请求中过滤访问权限,则N身份非常有用。
让我们假设我必须创建另一个名为' 特许经营'除了在Yii2 Framework中很好地耦合的现有用户。
数据库迁移
使用命令
创建新的迁移文件yii migrate/create create_franchise
复制粘贴现有迁移文件的内容 PROJECT_NAME \ console \ migrations ,例如' m170311_105858_create_user.php 强>'并从' user'重命名表名特许经营'
现在,运行迁移命令
yii/migrate
您必须在命令提示符
上获得类似的内容 Apply the above migrations? (yes|no) [no]:yes
applying m170311_105950_create_franchise
create table {{%franchise}} ... done (time: 1.304s)
applied m170311_105950_create_franchise (time: 1.350s)
检查DB是否创建了DB。 (我假设您已在 PROJECT_NAME \ common \ config \ main-local.php 中进行了数据库设置)
创建特许经营模式
转到Gii'模块并为新创建的特许经营表创建模型。
模特位置必须 PROJECT_NAME \ common \ models \ Franchise.php
确保Model类实现IdentityInterface 并实现 IdentityInterface
身份等级
如果您前往位置 PROJECT_NAME \ vendor \ yiisoft \ yii2 \ web \ User.php 。这是在项目中随处可见的类 Yii :: $ app-> user 。复制粘贴此类的内容并创建一个名为 PROJECT_NAME \ vendor \ yiisoft \ yii2 \ web \ Franchise.php 的新文件,并将内容粘贴到其中。在文件中进行以下更改。
<强> PROJECT_NAME \厂商\ yiisoft \ yii2 \网络\ Application.php 强>
在 Application.php 中添加以下方法,
public function getFranchise()
{
return $this->get('franchise');
}
还可以找到方法 coreComponents()并再添加一个条目,如下所示
'Franchise' => ['class' => 'yii\web\Franchise'],
<强> PROJECT_NAME \前端\配置\ main.php 强>
在组件内,在&#39; user&#39;之后添加以下条目条目,
'franchise' => [
'identityClass' => 'common\models\Franchise',
'enableAutoLogin' => true,
'class' => 'yii\web\Franchise',
'identityCookie' => ['name' => '_fidentity-frontend', 'httpOnly' => true],
],