Как использовать логические операторы в DEFAULT_PERMISSION_CLASSES DRF? - PullRequest
1 голос
/ 13 июля 2020

Поскольку DRF == 3.9 - (примечания к выпуску) у нас есть возможность комбинировать / составлять классы разрешений в наших представлениях.

class MyViewSet(...):
    permission_classes = [<b>FooPermission & BarPermission</b>]

Я пробовал что-то вроде this,

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (

        <b>'utils.permissions.FooPermission' & 'utils.permissions.BarPermission',</b>

    ),

    # other settings

}

и python вызвало исключение

TypeError: неподдерживаемые типы операндов для &: 'str' и 'str'

Итак,

Как я могу использовать комбинированное разрешение как глобальное, используя DEFAULT_PERMISSION_CLASSES?

1 Ответ

1 голос
/ 13 июля 2020

Я создал новую переменную , объединив эти классы и сославшись на нее в DEFAULT_PERMISSION_CLASSES,

# utils/permissions.py

from rest_framework.permissions import BasePermission


class FooPermission(BasePermission):

    def has_permission(self, request, view):
        # check permissions

        return ...


class BarPermission(BasePermission):

    def has_permission(self, request, view):
        # check permissions

        return ...


<b>CombinedPermission = FooPermission & BarPermission</b>

# settings.py

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (

        <b>'utils.permissions.CombinedPermission',</b>

    ),

    # other settings

}
...