我几乎在那里,但我无法得到这个。
我已获得自定义权限设置:
from rest_framework.permissions import BasePermission, SAFE_METHODS
class IsOwnerOrStaff(BasePermission):
def has_permission(self, request, view):
return view.action == 'retrieve' or request.user.is_staff
def has_object_permission(self, request, view, obj):
if request.method in SAFE_METHODS:
return True
return request.user.is_staff or obj == request.user
用户视图执行此操作:
from django.contrib.auth.models import User
from rest_framework import viewsets
from rest_framework import permissions
from .serializers import UserSerializer
from .permissions import IsOwnerOrStaff
class ViewMixins(object):
permission_classes = (permissions.IsAuthenticated, IsOwnerOrStaff,)
class UserViewSet(ViewMixins, viewsets.ModelViewSet):
serializer_class = UserSerializer
model = User
一切都适用于request.user.is_staff
,并且对非员工用户有权限控制。但是,除了查看它之外,NOT工作人员用户无法在自己的记录上做任何事情。
我认为if request.method in SAFE_METHODS
允许通过,但我似乎错过了一些东西。
建议欢迎。
顺便说一句:我希望user.is_staff能够做任何事情和一个非工作人员只能在他们的OWN记录上进行GET / PUT / PATCH / POST。
谢谢!
答案 0 :(得分:1)
它比你正在尝试的更容易。覆盖视图的get_queryset方法:
if self.request.user.is_superuser: return Model.objects.all() else: return Model.objects.filter(owner=self.request.user)
ofc,您需要模型中指向创建者/所有者的字段。