Laravel(php) + разное описание для пользователей с ролью

Может кто-то подсказать как реализовать разные поля для разных ролей. К примеру у пользователей в профиле есть номер телефона, а у администратора отдел и организация. Что-то на подобии? Или ссылочку, где можно почиатть введите сюда описание изображения


Ответы (1 шт):

Автор решения: Vladimir Gonchar

2 крайние таблицы - это вообще какой-то прикол... Сущности не должны быть таблицами.

У Вас есть таблица users, таблица roles. Добавляете таблицу user_has_roles (назначение ролей), если ролей может быть много на одного пользователя. Если нет, то просто поле в users — "role_id".

В users добавляете поля ("department", "organization", "phone"), которые содержат информацию для конкретного пользователя. Можно нормализовать таблицу: создать таблицы user_fields ("id", "name", "title"), user_has_fields ("user_id", "user_field_id", "value") и в них писать информацию в зависимости от заполнения в профиле. Так не будет лишних пустот в таблице с пользователями. Но работать становится сложнее.

Дальше уже в своей бизнес-логике обрабатываете, что может заполнять админ, а что пользователь, и, соответственно, в шаблоне тоже выводите в зависимости от роли пользователя телефон или отдел с организацией. Именно кодом это делается. База данных только хранит данные.

Можете в принципе не городить велосипеды с системой прав и воспользоваться пакетом Spatie Laravel Permissions


UPD. В целом, Вы можете завести 2 таблицы user_contacts ("user_id", "phone"), user_organizations ("user_id", "department", "organization"). НО они в любом случае не зависят от ролей в БД. Должна браться связь с моделью в зависимости от существования у пользователя роли.

→ Ссылка