Модель Project
с отношением ManyToMany к модели User
, используя таблицу соединений. Если пользователь не является участником проекта (а не в таблице соединений), я хочу, чтобы пользователь не получал доступ к представлению, показывающему конкретный проект.Django custom decorator для пользовательского разрешения
Я знаю, что он может быть разрешен с помощью простого оператора if внутри метода представления или настраиваемого фильтра в шаблоне, но я хотел бы иметь возможность сделать это с помощью специального декоратора. Возможно ли это? Если да, то как это можно сделать?
Что-то вроде:
def may_user_view_this(function):
def wrapper(request, *args, **kwargs):
user = request.user
project = Project.objects.get(id=???????) #id
if not project.has_user(user):
return HttpResponse('You cannot view this.')
else:
return function(request, *args, **kwargs)
return wrapper
@may_user_view_this() # if not go the specific url
def my_view(request, page_id=None):
# do stuff and render
Как я могу получить доступ к параметру page_id
отправляется my_view
из функции декоратора?
Да, это возможно. –