@Travious

Форма авторизации на Yii2: как реализовать модель? Нормально ли 2 модели ActiveRecord на 1 таблицу?

Имеется: БД MySQL, в ней таблица user, в ней пока минимум полей: id, username, password, perms (это кое-какие привилегии - права), authKey и accessToken.

Требуется:
1) Сделать форму входа, чтобы юзер брался из той таблицы.
2) У администратора сделать грид с CRUD, для редактирования той-же самой таблицы: добавлять юзеров, удалять и т.п.
Регистрации НЕ будет, т.е. всех вручную админ добавлять.

Итак, с помощью Gii создал ActiveRecord-модель User для этой самой таблицы. Здесь все ОК.
Потом унаследовал модель User от IdentityInterface. Тоже ОК.
Затем для этого User сгенерировал форму входа.
И для этого же User сгенерировал CRUD.

И вот тут проблемы.
Поле perms.
Как убрать его из формы входа, но оставить в CRUD? Ведь в CRUD это поле должно быть required, при авторизации же его вообще не должно быть.
Решение очевидно: во вьюшках убрать лишние инпуты и прочее подправить. Но как-то не нравится.
А вы как думаете, нормально это будет?
Или лучше что-то придумать, добавить куда-нибудь прослойку, скажем сделать модель LoginForm для формы входа, а уже в ней обращаться к User, ну а из CRUD напрямую к User?
Или для CRUD тоже прослойку?
Или просто сделать 2 модели ActiveRecord на 1 таблицу?
  • Вопрос задан
  • 1022 просмотра
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
Конечно можно решить эту задачу и с помощью Active Record используя сценарии и безопасные атрибуты
Но как по мне это не совсем правильно с архитектурной точки зрении, т.к:
1. Мы получаем сильную связанность авторизации и AR пользователей - а это не хорошо
2. Нагромождаем AR пользователей лишним кодом, что само по себе усложнит понимания кода.
А с учетом того что система может расширяться в будущем эти два фактора очень повлияют на поддержку, т.к. когда код сильно связан и нагроможден с ним очень сложно работать.

Более правильно, на мой взгляд, выносить авторизацию и всю логику связанную с ней в отдельную модель наследуемую от \yii\base\Model, которая уже будет в своей работе использовать AR User
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы