配置Yii2中的多个用户标识

时间:2016-02-07 14:27:38

标签: yii2 yii2-rbac

我开发了一个有两个不同注册的网站,我有2个不同的表,我使用RbacDB,并且在组件部分的web配置中我有用户配置,根据这个我想知道如何使用2个不同配置文件中的字段?

config:

UnauthorizedAccessException

当我这样做时,显示此错误 enter image description here

谢谢!

3 个答案:

答案 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个身份;

  • 以上解决方案只是部分答案的建议和一些有用的建议。请按照我下面的深度更改,您可以根据需要创建N个身份。
  • 如果您不想实施复杂RBAC(基于角色的访问控制)并且只想在控制器的请求中过滤访问权限,则N身份非常有用。

  • 让我们假设我必须创建另一个名为' 特许经营'除了在Yii2 Framework中很好地耦合的现有用户。

数据库迁移

  1. 使用命令

    创建新的迁移文件
    yii migrate/create create_franchise
    
  2. 复制粘贴现有迁移文件的内容 PROJECT_NAME \ console \ migrations ,例如' m170311_105858_create_user.php '并从' user'重命名表名特许经营'

  3. 现在,运行迁移命令

    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)
      
  4. 检查DB是否创建了DB。 (我假设您已在 PROJECT_NAME \ common \ config \ main-local.php 中进行了数据库设置)

  5. 请注意,无论身份类别是什么,它现在都应该使用以上“特许经营权”。表
  6. 创建特许经营模式

    1. 转到Gii'模块并为新创建的特许经营表创建模型。

    2. 模特位置必须 PROJECT_NAME \ common \ models \ Franchise.php

    3. 确保Model类实现IdentityInterface 并实现 IdentityInterface

    4. 的强制方法

      身份等级

      1. 如果您前往位置 PROJECT_NAME \ vendor \ yiisoft \ yii2 \ web \ User.php 。这是在项目中随处可见的类 Yii :: $ app-> user 。复制粘贴此类的内容并创建一个名为 PROJECT_NAME \ vendor \ yiisoft \ yii2 \ web \ Franchise.php 的新文件,并将内容粘贴到其中。在文件中进行以下更改。

        • 查找' 用户'并将其替换为' 特许经营'。
        • 查找' 用户'并将其替换为' 特许经营'。
        • 查找 $ loginUrl = ['网站/登录']; 并将其替换为 $ loginUrl = [' franchise / login']; 因为您将拥有不同的控制器来处理与特许经营相关的行为。
        • 查找 $ identityCookie = [' name' => ' _identity',' httpOnly' =>是]; 并替换' 名称' as' _fidentity ' (你可以看到差异,身份cookie必须是唯一的)
        • 查找 $ authTimeoutParam =' __过期'; 并将其替换为 $ authTimeoutParam =' _f_expire';
      2. <强> PROJECT_NAME \厂商\ yiisoft \ yii2 \网络\ Application.php

        1. Application.php 中添加以下方法,

          public function getFranchise()
          {
              return $this->get('franchise');
          }
          
        2. 还可以找到方法 coreComponents()并再添加一个条目,如下所示

          'Franchise' => ['class' => 'yii\web\Franchise'],
          
        3. <强> PROJECT_NAME \前端\配置\ main.php

          1. 组件内,在&#39; user&#39;之后添加以下条目条目,

             'franchise' => [
                    'identityClass' => 'common\models\Franchise',
                    'enableAutoLogin' => true,
                    'class' => 'yii\web\Franchise',
                    'identityCookie' => ['name' => '_fidentity-frontend', 'httpOnly' => true],
                ],