使用 django 配置用户权限



我用Django编写了一个API服务。我已经授权用户通过 django 管理面板仅列出客户端。 当我使用我授权的用户名进入 django 管理面板时,授权没有问题。

但是当我访问 api 服务时,他从未看到权威。

你可以帮我吗?

API/权限.py

from rest_framework.permissions import BasePermission
class IsOwner(BasePermission):
def has_permission(self, request, view):
return request.user and request.user.is_authenticated
message = "you cannot change data that you do not own !"
def has_object_permission(self, request, view, obj):
return (obj.user == request.user) or request.user.is_superuser

views.py

class CustomerListAPIView(ListAPIView):
serializer_class = CustomerCreateSerializer
permission_classes = [IsOwner]
filter_backends = [SearchFilter]
search_fields = ['customerName', 'customerSurname', 'customerIdentityNo']
def get_queryset(self):
queryset = Customer.objects.filter(user=self.request.user)
return queryset

settings.py

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissions'
]
}

朋友

当我运行 api 时,它根本不输入">has_object_permission"。只有当我使用用户帐户从管理面板登录时,它才会进入"has_object_permission"。 当我运行 API 时,它永远不会进入"has_object_permission"。

  1. 首先,检查您是否在请求中获得了用户,您可以按照我上面所说的那样通过在返回字符串上方的 IsOwner 权限中添加print(request.user)来执行此操作。
  2. 测试当您向 API 发出请求时,您是否在请求中获得了用户(我猜是从浏览器?
  3. 如果函数将 prone 为"无",则需要在授权标头中添加 JWT 令牌。基本上,这就是 JWT 的工作方式。通常需要在请求的授权标头中添加字符串(在设置 + 中定义的某个代码字(JWT/令牌(,以便 API 会将您标识为特定用户。
  4. 您可以从不同的服务中执行此操作。例如,我通常使用邮递员服务来测试并向我的 API 发出请求。你可以在这里找到它: https://www.getpostman.com/

我写这个作为答案,因为评论长度不够。

相关内容

最新更新