Проблема
Всем привет. При разработке API для очередного веб-портала я взял свой привычный стек:
- Django
- django-rest-framework
Но в этот раз стояла довольно непривычная задача — сделать одну User модель, которая может иметь несколько разных профилей (Исполнитель, Заказчик). И наличие каждого из профилей дает разные полномочия на работу с одними и теми же ресурсами.
Такой подход позволяет пользователям не заводить несколько учетных записей для каждой роли, что зачастую было бы невозможно, ввиду ограничений на модель: уникальный email или номер телефона.
Итак, опишем возникшие перед нами проблемы:
- Один пользователь – несколько профилей.
- Как организовать права каждого из профилей.
- Доступ к одним тем же ресурсам от разных профилей.
Ниже я приведу свой способ решения этой задачи, который сложился из уже наработанных привычек по организации Django-проекта, а также попыток придумать наиболее гибкое и масштабируемое решение.