Как написать декоратор для проверки кастомных permissions
Есть PERMISSION_CHOICES и есть модель в которую передаётся User и choiсes оба уникальные поля. Разрешения еще будут добавляться(пока хочу проверить на одном).
class Perm(models.Model):
EDIT_USER = 'edit_user'
PERMISSION_CHOICES = [
(EDIT_USER, 'Can edit user '),
]
user_perm = models.ForeignKey(User, on_delete=models.CASCADE, null=True, unique=True,
blank=True, related_name='user_perm')
choices_perm = models.CharField(max_length=2, choices=PERMISSION_CHOICES,
unique=True)
Мне нужно написать декоратор который будет проверять есть ли у данного user такое разрешение. если есть его пускает к views если нет то редирект.
Я уже кое что написал но застрял.
def check_perm(??????):
def you_need_perms(view):
def wrapper(request):
current_perms = Perm.objects.filter(user=request.user)
if func(current_perms, ??????):
return view(request)
else:
return redirect('account:index')
return wrapper
return you_need_perms
Как мне передать разрешения для проверки в этот будущий декоратор.
Ответы (1 шт):
Автор решения: Rostyslav
→ Ссылка
Нужно еще одну оболочку добавить, как-то так
def you_need_perms(permissions):
def wrapper1(view):
def wrapper(request):
current_perms = Perm.objects.filter(user=request.user)
if func(current_perms, permissions):
return view(request)
else:
return redirect('account:index')
return wrapper
return wrapper1
Использовать
@you_need_perms(your_permissions)
def get(request):
pass
Только в представлении первый параметр self(тогда его нужно добавить перед request) если оно относиться не к класу в целом