Yii2 Advanced - заставить бэкэнд использовать таблицу «admin» и модель «Admin»

Я пытаюсь настроить Yii2 как традиционную систему пользователя/администратора. Frontend будет /user, а backend будет /admin и будет использовать соответствующую таблицу в базе данных (user и admin). Я еще не переименовал интерфейс и бэкэнд в пользователя и администратора.

Использование миграции сгенерировало таблицу «пользователь» со всеми ее полями. Я зарегистрировался, чтобы создать нового пользователя, все работает отлично. Затем я скопировал таблицу «user», назвал ее «admin» и изменил имя пользователя на «admin». Я могу изменить пароль или сократить его, зарегистрировать нового пользователя-администратора, а затем удалить регистрацию из бэкэнда позже. Таблица администратора в самой БД не является проблемой, так как я не захожу так далеко, когда дохожу до ошибки.

Я настроил и использовал Yii2 advanced на стороне пользователя (пользователя). Конечно, у вас есть Yii::$app->user, и он отлично работает во внешнем интерфейсе. Я могу войти, он использует таблицу «пользователи». Фронтенд работает отлично...

Теперь на бэкэнде (admin) мне нужно использовать таблицу «admin». Я знаю, что вы указываете таблицу для использования в модели. Я скопировал /common/models/User.php и получил /common/models/Admin.php и обновил функцию, чтобы вместо этого использовать таблицу «admin».

Я также скопировал /vendor/yiisoft/yii2/web/User.php и поместил его в /common/models/web/Admin.php (и переименовал имя класса с User на Admin)

Затем я отредактировал файл /backend/config/main.php, чтобы отразить изменения для администратора (класс и класс идентификации).


/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.

Я хочу быть уверен, что пользователь не может войти в интерфейс, а затем вручную перейти в серверную часть и войти в систему!


person Wade    schedule 05.05.2015    source источник


Ответы (1)


Я решил это :)

Вы должны отредактировать основную конфигурацию каждого (внешнего интерфейса и внутреннего интерфейса) и указать «identityClass» для пользовательского компонента, а также добавить «сеанс» и «запрос» в список.

Пример конфига фронтенда:

'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: [Руководство] Как на самом деле разделить Frontend и Backend на Yii2 Advanced

person Wade    schedule 08.05.2015