@junart

Как разграничить хранение данных пользователей?

У меня есть тр пользователя , развивающиеся ролями и правами: доктор, поддержка, клиника.
Каждый имеет свой набор полей. Клиника, например, имеет адрес и дату основания. По сути у меня сейчас одна модель данных и таблица Users. Складывать в нее всё поля от разных профилей не вариант.
В тоже время если создавать три отдельные таблицы со своим набором полей.То как потом их сопоставить с моделью users. Чтобы после авторизации знать под кем работаешь. Хотя этим вроде уже занимается механизм полей и прав. Помогите пожалуйста разобраться, сейчас мешанина.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
vfreelancer
@vfreelancer
php
доктор, поддержка, клиника - это роли. а данные можно хранить в доп. таблицах. например, doctor_profiles, support_profiles. в них есть user_id - связь с users. тогда доступ можно так $user->doctorProfile, $user->supportProfile. Можно создать https://laravel.com/docs/9.x/eloquent-relationship... или просто отдельно связь $user->profile где внутри if/else hasOne в зависимоти от role.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Каждый имеет свой набор полей. Клиника, например, имеет адрес и дату основания.
Мне кажется вы как-то не так пользователей определяете, клиника как пользователь не кажется логичным утверждением. Пользователь - сущность имеющая общие атрибуты - логин, пароль, опционально дату регистрации и еще несколько признаков присущим людям/иным разумным. В частности, логинится не здание фирмы и не юридичкское лицо в виде учредительных документов, а конкретный Федор Пупкин из клиники "Веселая челюсть". И связь Федора с клиникой через один ко многим (либо многие ко многим, в зависимости от сложности возможных пересечений) видится более адекватной структурой, как минимум по тому что не только Федор может управлять действиями от лица клиники, а еще например бухгалтер Василиса Андреевна. Проблема в том что у вас юзерами стали объекты, по дефолту к ним не относящиеся. Как только вы отделите мух от котлет, все встанет на свои места, в том числе через роли, так как к клиникам будут иметь доступ только роли работников клиники.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
На уровне СУБД я бы не заморачивался и использовал разреженную таблицу. Т.е. таблица содержит поля, необходимые для объекта любого типа, но заполнены только те, что относятся к текущему типу, а остальные NULL.

Но вот насколько это реализуемо в Laravel - даже предсказать не берусь...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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