Форма авторизации на 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 таблицу?
Конечно можно решить эту задачу и с помощью Active Record используя сценарии и безопасные атрибуты
Но как по мне это не совсем правильно с архитектурной точки зрении, т.к:
1. Мы получаем сильную связанность авторизации и AR пользователей - а это не хорошо
2. Нагромождаем AR пользователей лишним кодом, что само по себе усложнит понимания кода.
А с учетом того что система может расширяться в будущем эти два фактора очень повлияют на поддержку, т.к. когда код сильно связан и нагроможден с ним очень сложно работать.
Более правильно, на мой взгляд, выносить авторизацию и всю логику связанную с ней в отдельную модель наследуемую от \yii\base\Model, которая уже будет в своей работе использовать AR User
Stasgar: а где именно рекомендуют? Если мы, к примеру посмотрим на стандартный шаблон приложения https://github.com/yiisoft/yii2-app-advanced/tree/... , созданный непосредственно разработчиками yii2 то можно увидеть что подобный вещи реализованы через отдельный модели