Подключение к Django
1. Настройки в settings.py
INSTALLED_APPS = [
...
'advantage.dynamic_roles',
...
]
ADVANTAGE = {
...
'DYNAMIC_ROLES': { # Название библиотеки
'EXCLUDE_APPS': ['djdt', 'admin'], # django приложения которые будет игнорировать анализатор роутера при генерации DynamicEndpointPermission
'DYNAMIC_PERMISSIONS_START': 'dep__', # есть возможность задать префикс для всех permissions, создаваемых dynamic roles
'DYNAMIC_LINK': { # подсистема статического связывания
'ROLES': { # настройка ролей
'admin': "Администратор",
...
'codename': "Отображаемое имя",
...
},
},
},
...
}
2. Необходимо выполнить миграции
python manage.py migrate
3. Теперь можно либо руками создать DynamicEndpointPermission, либо сгенерировать их автоматически исходя из ваших routes:
python manage.py perms
4. Для того чтобы система ролей работала для определённого endpoint необходимо добавить в него соответствующий permission_class:
from rest_framework.response import Response
from advantage.dynamic_roles.permission_access import PermissionAccess
from rest_framework.views import APIView
class ExampleView(APIView):
permission_classes = [PermissionAccess]
def get(self, request):
return Response('Response is ok')
После правильной настройки ожидается следующее поведение от системы:
Если endpoint содержит PermissionAccess в permission_classes и endpoint декларирован в базе данных в модели DynamicEndpointPermission, то пользователь не сможет сделать запрос на этот endpoint пока не выдадите ему соответствующий permission.