Skip to content

Подключение к 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.