【发布时间】:2020-01-25 16:25:12
【问题描述】:
我正在尝试检查某些 API 请求的权限。
我已经设置了 auth users 和 auth_user_user_permissions 和 auth_permissions 表,例如 view_company add_company bla bla,但问题不在于。问题是当我尝试使用装饰器时
@permission_required('API.view_company', raise_exception=True)
它对我说
AttributeError: 'CompanyDetailView' object has no attribute 'user'
很可能它正在寻找用户,因为它会检查 user_permission 是否可用于查看公司,但我在 urls.py (path('companies//', CompanyDetailView.as_view()),) 中声明的视图没有用户对象,这就是错误消息返回属性错误的原因,我该如何解决这个问题,非常感谢
我试图在视图类中设置示例用户,一开始,它起作用是因为视图正在寻找用户对象,我不能使用这种方式,因为每个请求都有不同的用户
import rest_framework
from rest_framework import status
from django.contrib.auth.models import User
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.decorators import permission_required
class CompanyDetailView(APIView):
@permission_required('api.view_company', raise_exception=True)
def get(self, request, id):
try:
request_data = {}
request_data['request_method'] = request.method
request_data['id'] = id
companies = Company.objects.get(id=id)
status = rest_framework.status.HTTP_200_OK
return Response(companies, status)
呜呜呜
url 行是 =
path('companies/<int:id>/', CompanyDetailView.as_view()),
我的错误信息是:AttributeError: 'CompanyDetailView' object has no attribute 'user'
当我调试时,我看到 request.user.has_perm('view_company')returned false 但仍然 api 给出响应,它假设说你不允许查看公司
【问题讨论】:
-
分享
Company的型号 -
from django.db import models from api.models.base import BaseModel class Company(BaseModel): name = models.CharField(max_length=50, null=True) code = models.CharField(max_length= 5、null=True, unique=True) is_active = models.BooleanField(default=True)
-
如果您说将用户关系添加到您的公司模型,我不能。假设检查请求用户,因为主要目的是x人用get方法请求那个api,这个x人能不能看到,重要的是x人的用户权限
标签: python django django-rest-framework django-authentication django-permissions