【发布时间】:2014-08-23 17:51:21
【问题描述】:
我快到了,但我不太明白。
我有一个自定义权限设置:
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。
谢谢!
【问题讨论】:
标签: django django-rest-framework