Django自定义权限方法或decorator



我有很多视图和多个用户类型。我想要一些特定用户类型可以看到的视图,而其他用户看不到。

例如,只有一家公司看到了这种观点,为此我在下面这样做:

@login_required
def only_company_can_view(request):
if not Company.objects.filter(owner_id=request.user.id).exists():
return HttpResponse('Permission Denied. Only Company can see this')
# > rest of the logic
return render(request, 'template.html')

除此之外,工作得很好,解决了我的问题,但我不喜欢这样。因为,我不想每次都为公司相关的观点写其余的观点。

所以我正在寻找一个解决方案,这样我就可以使用decorator或其他最佳实践的东西

在这种情况下有人能帮我吗?

您可以将逻辑包装在装饰器中:

from django.core.exceptions import PermissionDenied
from functools import wraps
defrequires_company(view):
@wraps(view)
def_view(request, *args, **kwargs):
if not Company.objects.filter(owner_id=request.user.id).exists():    
raise PermissionDenied
return view(request, *args, **kwargs)
return _view

然后使用装饰器:

@login_required
@requires_company
def only_company_can_view(request):
# … rest of the logic …
return render(request, 'template.html')

最新更新