Django DRF - 通过权限限制对列表视图的访问

Cod*_*ise 2 python django permissions python-3.x django-rest-framework

我有一个 DRF ViewSet,我正在向其中添加CanViewAndEditStaff权限。我只希望某些用户 ( user.access_level < 2) 能够查看员工列表。在我的权限类中,如何区分对list视图的调用和对get项目视图的调用。这是我的权限类:

class CanViewAndEditStaff(permissions.BasePermission):

        def has_permission(self, request, view):

            # IF THIS IS A LIST VIEW, CHECK ACCESS LEVEL
            if ( request.user.access_level < 3 ):
                return True

            # ELSE, CONTINUE ON TO OBJECT PERMISSIONS

        def has_object_permission(self,request,view,account):

            # admin can do anything
            if ( request.user.access_level == 1 ):
                return True

            # view/edit/delete
            else:

                # users can view their own account
                if  account == request.user:
                    return True

                elif account.access_level >= request.user.access_level:
                    return True

            return False
Run Code Online (Sandbox Code Playgroud)

Ykh*_*Ykh 7

class CanViewAndEditStaff(permissions.BasePermission):

    def has_permission(self, request, view):

        # IF THIS IS A LIST VIEW, CHECK ACCESS LEVEL
        if (view.action == 'list' and request.user.access_level < 3 ):
            return True

        # ELSE, CONTINUE ON TO OBJECT PERMISSIONS
Run Code Online (Sandbox Code Playgroud)

您可以使用 view.action 来了解这是列表还是其他内容。

  • 如果他使用 `GenericViewSet` 或其子类作为 `view`,那么可以使用 `self.action` 来区分视图方法。否则,他必须使用`request.method` t 区分请求方法 (2认同)
  • 对于那些古玩,可用的操作是 `create`、`retrieve`、`update`、``partial_update`、`destroy` 和 `list` (2认同)