【发布时间】:2021-09-04 10:08:36
【问题描述】:
tldr:我想获得一个允许“检索”操作但不允许“列表”的权限。
我正在使用 Django Rest Framework 编写 REST API,但在创建自定义权限时遇到了问题(对于来自 viewsets.ModelViewSet 的视图)
在创建一个应该返回站点用户的端点时遇到了困难:
-管理员应该有权访问每个方法
-普通用户应该只能“检索”和“修补”他自己的帐户
我找不到区分 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-framework django-views django-permissions