multiple user identity in config Yii2

前端 未结 3 1272
盖世英雄少女心
盖世英雄少女心 2021-01-21 08:15

I developing a site with two different registrations, and I have 2 different table, Im using RbacDB, and in the web config in the components section I have user configuration, a

3条回答
  •  南方客
    南方客 (楼主)
    2021-01-21 08:47

    I have gone through the yii2 framework internals. As I have understood, You can make N Identities following below technique;


    • Above solutions are just the suggestions which are partial answers and some what helpful. kindly Follow my below changes in depth and you can create N identities as desired.
    • N identities are very useful when you do not want to implement Complex RBAC (Role Based Access Control) and just want to Filter Access at controller's request.

    • Let us Assume I have to create yet another Identity called 'Franchise' other than existing User which is nicely coupled inside Yii2 Framework.


    DB Migrations

    1. Create a new migration file using command

      yii migrate/create create_franchise
      
    2. Copy paste the content of already available migration file at location PROJECT_NAME\console\migrations something like 'm170311_105858_create_user.php' and rename table name from 'user' to 'franchise'.

    3. Now, run migration command

      yii/migrate
      
      • You must get something like this on command prompt

          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. check DB whether DB is created. (I assume you have made DB settings in PROJECT_NAME\common\config\main-local.php)

    5. Please note that whatever may be the Identity class, it shall now use above 'Franchise' Table.

    Creating Franchise Model

    1. Just goto 'Gii' Module and create a model for newly create franchise table.

    2. Model location must be PROJECT_NAME\common\models\Franchise.php

    3. Make Sure that the Model class implements IdentityInterface and also implements mandatory methods of IdentityInterface


    Identity Class

    1. If you go to location PROJECT_NAME\vendor\yiisoft\yii2\web\User.php. This is the class that is referred everywhere in your project as Yii::$app->user. Copy paste the content of this class and create a new File called PROJECT_NAME\vendor\yiisoft\yii2\web\Franchise.php and paste the content in it. Make below changes in the file.

      • Find 'user' and replace it with 'franchise'.
      • Find 'User' and replace it with 'Franchise'.
      • Find $loginUrl = ['site/login']; and replace it with $loginUrl = ['franchise/login']; as you are going to have different controller to handle Franchise related actions.
      • Find $identityCookie = ['name' => '_identity', 'httpOnly' => true]; and replace the 'name' as '_fidentity' (you can see difference, identity cookie must be unique)
      • Find $authTimeoutParam = '__expire'; and replace it with $authTimeoutParam = '_f_expire';

    PROJECT_NAME\vendor\yiisoft\yii2\web\Application.php

    1. In Application.php add below method,

      public function getFranchise()
      {
          return $this->get('franchise');
      }
      
    2. Also find method coreComponents() and add one more entry as below,

      'Franchise' => ['class' => 'yii\web\Franchise'],
      

    PROJECT_NAME\frontend\config\main.php

    1. Inside components add below entry just after 'user' entry,

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

提交回复
热议问题