Django (DRF):如何在这个基于类的视图上应用身份验证?

问题描述 投票:0回答:1

在我的 Django 项目中,我有两个用户组:

  1. 经理
  2. 员工

现在我正在尝试构建一个基于类的视图来返回所有管理器。然而,它应该只有经理才能访问。如果员工或匿名用户尝试访问它,它应该返回 403-HTTP-Status 代码。 到目前为止,我已经构建了基于类的视图,为了简单起见,它扩展了 generics.ListAPIView。但我找不到应用所需身份验证的方法。

我已经从员工组中删除了“可以查看组”和“可以查看用户”权限,因此没有员工可以查看经理。我已经尝试了几个permission_classes,但每次我通过 Insomnia 发送包含员工令牌的 GET 请求时,它都会返回经理而不是 403 状态代码。 非常感谢您的帮助。

这是视图的代码:

class ViewManager(generics.ListAPIView):
    permission_classes = [DjangoModelPermissions]
    group = Group.objects.get(name='Manager')
    users = group.user_set.all()
    queryset = users
    serializer_class = ManagerSerializer
python django django-rest-framework
1个回答
0
投票

要将视图的访问权限授予特定组名称,您可以使用的命令是:

def my_view(request):
   if request.user.groups.filter(name='Manager').exists(): 
      print("User is Manager")

您可以制作自定义权限类别:

from rest_framework import permissions
from django.contrib.auth.models import Group

class IsManager(permissions.BasePermission):
    def has_permission(self, request, view):
        if not request.user.is_authenticated: # Exclude anonymous users
            return False
        return request.user.groups.filter(name='Manager').exists()

你可以这样使用它:

class ViewManager(generics.ListAPIView):
    permission_classes = [IsManager]
    ...
© www.soinside.com 2019 - 2024. All rights reserved.