首页 > 解决方案 > DRF 自定义权限:允许“检索”,拒绝“列表”

问题描述

tldr:我想获得允许“检索”操作但不允许“列表”的权限。

我正在使用 Django Rest Framework 编写 REST API,但在创建自定义权限时遇到了问题(对于来自 viewsets.ModelViewSet 的视图)

在创建一个应该返回站点用户的端点时遇到了困难:

-Admin 应该有权访问每个方法

- 普通用户应该只能“检索”和“修补”他自己的帐户

我找不到将 GET 请求“列表”与“检索”区分开来的方法。检查request.method == GET允许他们两个,但我不希望用户能够列出所有其他用户。

    from rest_framework.permissions import BasePermission

    ```

    def is_superuser(request):
         return request.user.is_superuser
        
    ```

    class IsAdminOrReadOnlyOwner(BasePermission):
        def has_permission(self, request, view):
            if is_superuser(request):
                return True
            else:
                return request.method in ['GET', 'PATCH']
        
        def has_object_permission(self, request, view, obj):
            is_owner_and_safe = int(request.user.id) == obj.id and request.method in ['GET', 'PATCH']
            return is_owner_and_safe or is_superuser(request)

有没有办法做到这一点,仍然使用 ModelViewSet?

标签: django-rest-frameworkdjango-viewsdjango-permissions

解决方案


尝试self.action在你的 mixin 中使用方法。它将为您提供列表、检索、更新、销毁作为您的操作方法,


推荐阅读