Как дать разрешение некоторым пользователям, которые позволяют просматривать только один экземпляр за один раз?

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

Но другая функция, такая как 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 может выполнять все эти действия (получить\опубликовать\исправить\обновить\удалить).

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

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


person Mykyta    schedule 19.06.2020    source источник


Ответы (1)


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

Я сделал это:

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
person Mykyta    schedule 20.07.2020