Django Rest Framework -基于组添加视图权限?

zdwk9cvp  于 2022-12-27  发布在  Go
关注(0)|答案(1)|浏览(141)

TLDR:如何允许特定群组使用Django Rest Framework访问视图?

我正在用DjangoRest框架构建一个Web服务,只有一个(适当的)视图子集是为客户准备的。
到目前为止,我已经:
1.将默认权限设置为rest_framework.permissions.IsAdminUser
1.创建了一个名为is_customer的权限(使用Django管理网站)
1.创建了一个名为customers的组,并将所有相关用户添加到此组(使用管理员网站)
1.已将is_customer权限添加到customers(再次使用管理员网站)
我的所有视图都是基于函数的。为了给customers组提供适当的权限,我尝试了

from rest_framework.decorators import api_view
from django.contrib.auth.decorators import permission_required

@api_view(["POST"])
@permission_required(["is_customer"])
def my_func(request):
  # calculations
  return Response(...)

EDIT:还尝试了以下方法

from rest_framework import permissions
from rest_framework.decorators import api_view

class IsCustomer(permissions.BasePermission):

    def has_permission(self, request, view):
        if request.user.is_customer:
            return True
        return False

    def has_object_permission(self, request, view, obj):
        if request.user.is_customer:
            return True
        return False

@api_view(["POST"])
@permission_required([IsCustomer])
def my_func(request):
  # calculations
  return Response(...)

以及

from rest_framework.decorators permission_classes, api_view

@api_view(["POST"])
@permission_classes(["is_customer"])
def my_func(request):
  # calculations
  return Response(...)

而且这两种方法似乎都不起作用。什么是正确的方法呢?提前感谢你的建议!

fhity93d

fhity93d1#

如果直接引用类,最后一个块应该可以工作:

from rest_framework.decorators permission_classes, api_view

@api_view(["POST"])
@permission_classes([IsCustomer])
def my_func(request):
    # calculations
    return Response(...)

您可以在此处查看包含类似示例的文档:https://www.django-rest-framework.org/api-guide/permissions/

相关问题