Как использовать роли Django для SaaS-продукта с порталом администратора?
Я постараюсь объяснить нашу идею желаемого продукта как можно понятнее, но не стесняйтесь задавать дополнительные вопросы.
Итак, в основном мы хотим создать SaaS-продукт, который будет использоваться несколькими клиентами. На данный момент нас не интересуют пользовательские домены типа (cust1.myproduct.com, cust2.myproduct.com), и мы просто будем использовать одну базу данных для управления данными всех клиентов. Пока все хорошо.
Наш SaaS-продукт будет продаваться корпоративным организациям, которые затем будут использовать его сотрудники. Таким образом, для одной организации-клиента существует три типа ролей, которые мы хотели бы предоставить их пользователям, а именно:
Админ: Администратор организации, который должен иметь возможность выполнять все настройки для этой конкретной организации
Менеджер: Менеджер организации, который может управлять пользователями, находящимися в его/ее команде
Сотрудник: Обычный пользователь с минимальными правами, который может управлять только своими собственными данными
Теперь, чтобы обеспечить клиентов для этого SaaS-продукта и установить их глобальные настройки (например, максимально допустимые пользователи, тип лицензии и т.д.), мы также планируем создать административный портал и API, которые будут использоваться только нашими внутренними сотрудниками. Для этого портала мы также хотим определить роли следующим образом:
Executives: Все высшие руководители нашей компании, у которых будут разрешения на просмотр конфиденциальных данных клиентов
Sales: Все наши сотрудники отдела продаж, которые имеют некоторые базовые права на предоставление клиентов
Engineering: Вся наша команда инженеров с правами на просмотр базовой информации
Итак, подведем итог: мы хотим создать три разные роли для пользователей наших клиентов и три разные роли для нашего внутреннего портала администратора. Обе системы отличаются друг от друга и имеют разное назначение. Кроме того, пользователи обоих порталов имеют различные поля.
На данный момент я рассмотрел следующие маршруты, но не уверен, какой из них лучше:
1- Определите модель пользователя, затем наследуйте два различных типа пользователей от этой модели пользователя, такие как ManagementUser и CustomerUser, определите их собственные поля, создайте поле роли в обоих, которое может иметь различные значения с несколькими вариантами выбора в соответствии с их ролями. Затем просто создайте разрешения, такие как IsCustomerUserAdmin, IsCustomerUserManager, IsCustomerUserEmployee для клиентов и аналогично IsManagementUserExecutive, IsManagementUserSales, IsManagementUserEngineer для администраторов.
2- Используйте систему внутренних групп Django и создайте три различные группы для клиентов и три различные группы для администраторов в зависимости от их ролей и определите соответствующие разрешения.
3- Полностью разделите два проекта, каждый из которых имеет свою собственную базу данных. Проект администратора будет применять изменения в БД проекта клиента непосредственно для предоставления новых клиентов или изменения их ролей.
Спасибо!