【问题标题】:How to give permission to some user which allow only view one instance by one time?如何授予某些用户一次只能查看一个实例的权限?
【发布时间】:2020-10-09 20:54:21
【问题描述】:

我总是希望允许检查所有用户一次查看一个实例。

但另一个函数如 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用户可以做所有这些操作(get\pos​​t\patch\update\delete)。

我不明白我需要做什么。

有人有什么想法吗?

【问题讨论】:

    标签: django django-rest-framework user-permissions


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2019-04-13
      • 2019-07-13
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多