Возможно название темы не очень говорящее, не пришло в голову ничего лучше.
Небольшое предисловие.
Пишу веб-приложение для компании, которая предлагает услуги по созданию медиаконтента - смесь системы документооборота и приложения для работы с клиентами и их заказами.
Есть несколько типов пользователей: админ, менеджеры, клиенты, агентства и исполнители.
Админы имеют полный контроль над системой, могут создавать любых пользователей.
Менеджеры - то же что и админы только с ограничениями.
Клиенты могут работать только с заказами и документами, которые относятся к их заказам.
Клиентов могут вести агентства (клиенты "принадлежат" агентствам), т.е. агентства могут работать с заказами своих клиентов.
Исполнители непосредственно выполняют заказы, которые дают им менеджеры.
У каждого типа пользователя могут быть свои "атрибуты" и связанные модели, например, к исполнителю можно прицепить паспортные данные, контакты (аська, скайп), есть таблица платежей, которые поступают от менеджера или админа.
У клиента есть реквизиты, название компании и тоже таблица платежей, но уже менеджеру.
У всех пользователей есть общие поля - это почта, логин, пароль и имя.
Суть проблемы вот в чем:
Как грамотно построить модель/модели пользователей и их атрибутов, связанных таблиц?
У каждого типа пользователя есть своя панель управления, причем по функцианалу они весьма различные.
Пользователи должны иметь одну точку входа в панель, т.е. все пользователи заходят с одной страницы.
Есть такой вариант решения проблемы:
Создать одну модель (таблицу) пользователей с общими полями и полем "роль".
Создать несколько связанных таблиц, например, developer_payments, client_payments, developer_info, client_info и т.д.
По полю роль отслеживать тип пользователя и джойнить соответствующие таблицы.
Решение топорное, но работающее. В итоге получается много таблиц с префиксом developer_ или client_.
При этом когда нужно добавить новый тип пользователей приходится плодить таблицы.
Возможно есть более подходящее решение?