我正在尝试检查一些API请求的权限。
我已经像view_company
add_company
等设置了auth用户、auth_user_user_permissions和auth_permissions表,但问题不在于此。问题是当我尝试使用装饰器时。
@permission_required('API.view_company', raise_exception=True)
它对我说:
AttributeError: 'CompanyDetailView' object has no attribute 'user'
很可能它正在寻找用户,因为它要检查用户权限是否有权查看公司,但我在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)
bla bla bla
url line was =
path('companies/<int:id>/', CompanyDetailView.as_view()),
我的错误信息是:
AttributeError: 'CompanyDetailView'对象没有属性'user'
当我进行调试,看到request.user.has_perm('view_company')
返回false,但是API仍然会给出响应,它应该说您无权查看公司。
Company
的模型 - Usman Maqbool