Как дать разрешение некоторому пользователю, который позволяет просматривать только один экземпляр за раз? - PullRequest
0 голосов
/ 19 июня 2020

Я всегда хочу разрешить проверку для всех пользователей, просматривающих один экземпляр за один раз.

Но другая функция, такая как get (list) \ post \ patch \ update \ delete, только для пользователя, у которого есть общие разрешения для этих действий.

class IsCardAccess(BasePermission):

    def has_permission(self, request, view):
        has_perm = False
        if request.user and request.user.is_authenticated:
            if request.user.has_perm_extended(PERM_CARD_ACCESS):
                has_perm = True
            elif request.user.has_perm_extended(PERM_CARD_SUPER_ACCESS):
                has_perm = True

        return has_perm

Таким образом, пользователь без PERM_CARD_ACCESS и PERM_CARD_SUPER_ACCESS ничего не может сделать, но когда пользователь PERM_CARD_ACCESS может выполнять все эти действия (получить \ post \ patch \ update \ delete).

Я не понимаю, что мне нужно делать.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 20 июля 2020

Я забыл об этом вопросе, но теперь могу написать свой ответ.

Я сделал это:

def has_permission(self, request, view):
    has_perm = False

    if not request.user or not request.user.is_authenticated:
        return has_perm

    if request.user.has_perm_extended(PERM_CARDS_ACCESS) or \
            request.user.has_perm_extended(PERM_CARDS_SUPER_ACCESS):
        has_perm = True
    elif request.user.has_perm_extended(PERM_VIEW_CARD_ACCESS):
        # user with this perm has got limited access to check card-info
        if hasattr(view, 'action'):
            resolve_url = resolve(request.path).url_name
            if view.action == 'retrieve' and resolve_url == "cards-card-detail":
                has_perm = True
            if view.action == 'list' and resolve_url == "cards-operations-list":
                has_perm = True

    return has_perm
...