Идентификация нескольких пользователей в конфигурации Yii2

Я разрабатываю сайт с двумя разными регистрациями, и у меня есть две разные таблицы, я использую RbacDB, и в веб-конфигурации в разделе компонентов у меня есть пользовательская конфигурация, в соответствии с этим я хочу знать, как я могу использовать 2 разных поля в конфигурационный файл?

конфиг:

'components' => [
    'request' => [
        // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
        'cookieValidationKey' => '213h2i3121h12osiajls',
    ],
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
    'user' => [
        'identityClass' => 'app\models\User',
        'enableAutoLogin' => true,
    ],
    // Here after user I need to add another config user-two
    'user-two' => [
        'identityClass' => 'app\models\SecondUser',
        'enableAutoLogin' => true,
    ],

когда я делаю это, показывает эту ошибку, введите описание изображения здесь

Спасибо!

3 ответа

Решение

Попробуйте установить свойство класса в компоненте user-два:

'user-two' => [
    'class' => 'yii\web\User'
    'identityClass' => 'app\models\SecondUser',
    'enableAutoLogin' => true,
],

или создайте новый класс, унаследованный от класса yii\web\User, и установите его так:

'user-two' => [
    'class' => 'app\models\NewClassInheritedFromUserClass'
    ....
]

Может быть, это поможет вам.

Я прошел через внутренние рамки yii2. Как я понял, Вы можете создать N Идентификаций, следуя приведенной ниже методике;


  • Приведенные выше решения - это просто предложения, которые являются частичными ответами, а некоторые полезны. Пожалуйста, следуйте моим ниже изменениям в глубине, и вы можете создавать N тождеств по желанию.
  • N тождеств очень полезны, когда вы не хотите реализовывать сложный RBAC (управление доступом на основе ролей) и просто хотите фильтровать доступ по запросу контроллера.

  • Предположим, мне нужно создать еще одну личность под названием " Франшиза ", отличную от существующего пользователя, которая хорошо связана внутри Yii2 Framework.


БД Миграции

  1. Создайте новый файл миграции с помощью команды

    yii migrate/create create_franchise
    
  2. Скопируйте, вставьте содержимое уже доступного файла миграции в папку PROJECT_NAME\console\migrations что-то вроде ' m170311_105858_create_user.php ' и переименуйте имя таблицы из 'user' в 'franchise'.

  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. проверьте БД, создана ли БД. (Я предполагаю, что вы установили параметры БД в PROJECT_NAME \ common \ config \ main-local.php)

  5. Обратите внимание, что каким бы ни был класс Identity, теперь он должен использоваться над таблицей "Франшиза".

Создание модели франшизы

  1. Просто зайдите в модуль "Gii" и создайте модель для новой таблицы франчайзинга.

  2. Расположение модели должно быть PROJECT_NAME\common\models\Franchise.php

  3. Убедитесь, что класс Model реализует IdentityInterface, а также реализует обязательные методы IdentityInterface


Идентификационный класс

  1. Если вы перейдете по адресу PROJECT_NAME \ vendor \yiisoft\yii2\ web\ User.php. Этот класс везде упоминается в вашем проекте как Yii:: $ app-> user. Скопируйте, вставьте содержимое этого класса и создайте новый файл с именем PROJECT_NAME\vendor\yiisoft\yii2\web\Franchise.php и вставьте в него содержимое. Сделайте ниже изменения в файле.

    • Найдите пользователя и замените его франшизой.
    • Найдите " Пользователь " и замените его на " Франшиза ".
    • Найти $loginUrl = ['site/login']; и замените его на $loginUrl = ['franchise/login']; поскольку у вас будет другой контроллер для обработки действий, связанных с франшизой.
    • Find $ identityCookie = ['name' => '_identity', 'httpOnly' => true]; и замените " имя " на " _fidentity " (вы можете увидеть разницу, идентификационный файл cookie должен быть уникальным)
    • Find $ authTimeoutParam = '__expire'; и замените его на $ authTimeoutParam = '_f_expire';

PROJECT_NAME \ поставщика \yiisoft\yii2\ Web\ application.php

  1. В Application.php добавьте ниже метод,

    public function getFranchise()
    {
        return $this->get('franchise');
    }
    
  2. Также найдите метод coreComponents() и добавьте еще одну запись, как показано ниже,

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

PROJECT_NAME \ фронтенд \ Config \ main.php

  1. Внутри компонентов добавьте запись ниже сразу после ввода 'user',

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

Вы должны создать веб-класс пользователя для второй личности

namespace app\components;

class UserTwo extends \yii\web\User{
}

чем указать имя класса в вашей конфигурации

'user-two' => [
        'class'=> 'app\components\UserTwo'
        'identityClass' => 'app\models\SecondUser',
        'enableAutoLogin' => true,
    ],
Другие вопросы по тегам