Как убрать это наложение прав пользователя и ролей в моем проекте Django API?
Установка проекта: Я работаю над проектом, в котором мы разрабатываем ролевой доступ для пользователей. Это означает, что пользователь_1 является ролью (группой) "Руководитель" и имеет определенные разрешения, в то время как пользователь_2 является ролью "Пользователь" и имеет меньше разрешений. Эти разрешения уже определены (нам была предоставлена матрица разрешений каждой роли). Разрешение - это набор конечных точек.
- Модели: Модель User находится в M2M-отношении с моделями Group и Permission. Модель Group находится в M2M отношениях с моделью Permission, а сама модель Permission находится в M2M отношениях с моделью Endpoint. .
- Поток: Пользователям присваивается 0 или более групп. Группа состоит из 0 или более разрешений. Разрешение состоит из 0 или более конечных точек. .
- Технологический стек: Django (DRF API) в качестве бэкенда, vue.js фронтенд. .
Проблема: При посещении "Страницы X" на лицевой стороне, приложение обращается к конечным точкам "/api/endpoint-1" и "/api/endpoint-2/" для сбора необходимых данных. Пользователь с ролью "Пользователь" должен видеть все содержимое этой страницы. Однако затем пользователь с ролью "Пользователь" решает посетить "Страницу Y". Там приложение обращается к той же конечной точке "/api/endpoint-1/", но пользователь не должен иметь доступа к этой странице.
Проще говоря, одни и те же конечные точки используются для загрузки данных для двух разных страниц. Сценарий использования таков, что роль пользователя должна иметь доступ к первой странице, но не ко второй.
Вопрос: Как мне справиться с этим конфликтом/перекрытием? Решение, которое я смог придумать, заключается в разделении логики конечных точек: посещение "Страницы X" будет попадать в конечную точку "/api/endpoint-1/". Затем изменить код, чтобы "Страница Y" попала на новую конечную точку "/api/endpoint-3", которая будет соответствовать потребностям содержимого страницы. Это будет работать, но у меня есть такие накладки в нескольких местах по всему приложению, поэтому мне интересно, есть ли другие, более "django" или более "автоматизированные" способы решения этой проблемы.