Django Rest框架中的人员权限
我正在尝试创建仅限于人员的Django Rest Framework模型视图集。当我尝试使用标准的Django decoratorDjango Rest框架中的人员权限,django,django-rest-framework,Django,Django Rest Framework,我正在尝试创建仅限于人员的Django Rest Framework模型视图集。当我尝试使用标准的Django decorator@staff\u member\u required时,我遇到了一些错误,这让我相信decorator无法与Django Rest框架一起工作 因此,我正在尝试编写自己的ModelViewSet mixin。它主要按照我想要的方式工作,除了更新方法,我不能让它工作 所以,有两个问题:有没有更优雅的方法来做到这一点,如果没有,我的更新方法有什么问题?我找不到任何关于更新
@staff\u member\u required
时,我遇到了一些错误,这让我相信decorator无法与Django Rest框架一起工作
因此,我正在尝试编写自己的ModelViewSet mixin。它主要按照我想要的方式工作,除了更新方法,我不能让它工作
所以,有两个问题:有没有更优雅的方法来做到这一点,如果没有,我的更新方法有什么问题?我找不到任何关于更新的文档,所以我在猜测如何升级它,但它不起作用
谢谢
约翰
这是我的班级:
class StaffOnlyModelViewSet(viewsets.ModelViewSet):
def list(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).list(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def retrieve(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).retrieve(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def create(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).create(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def update(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).update(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def destroy(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).destroy(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
实现目标的更优雅的方式是使用。可以在视图级别全局声明,也可以使用装饰器声明 从: 您可以在views.py中使用它(其他方式请参见文档) 有些用户对权限和身份验证以及它们之间的关系感到困惑,因此我将为您提供一个快速入门 定义用户证明其身份的方法,权限定义谁有权访问哪些资源。无论身份是否在身份验证期间得到验证,都将根据权限检查用户的请求
当组合在一起时,您可以控制用户访问。例如,如果用户身份验证失败,但视图上的权限类设置为“IsAuthenticatedOrReadOnly”,则他们仍然可以获取/列出资源IsAdminUser’声明用户必须通过身份验证,并且必须是访问此视图的工作人员。这就是你在这种情况下想要的。一件挑剔的事。。。401_UNAUTHORIZED通常用于告诉请求者,为了获得访问权限,他们必须对自己进行身份验证。403_禁止明确告诉请求者,他们无法使用经过身份验证的凭据获得访问权限(因为他们不是员工)。不过,这可能没什么关系(:现在这就是我希望的答案!一些简洁易懂的东西非常有用。谢谢。还有一点很重要,可以像Django设置文件:REST\u FRAMEWORK={'default\u permission\u CLASSES'那样将其定义为DRF默认权限类:('rest_framework.permissions.isadmin用户',),
class IsAdminUser(BasePermission):
"""
Allows access only to admin users.
"""
def has_permission(self, request, view):
return request.user and request.user.is_staff
from rest_framework.permissions import IsAdminUser
class StaffOnlyModelViewSet(viewsets.ModelViewSet):
permission_classes = (IsAdminUser,)