在我的 Django 项目中,我有两个用户组:
现在我正在尝试构建一个基于类的视图来返回所有管理器。然而,它应该只有经理才能访问。如果员工或匿名用户尝试访问它,它应该返回 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
要将视图的访问权限授予特定组名称,您可以使用的命令是:
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]
...