Передача аргумента пользовательскому классу разрешения в django
У меня есть пользовательский класс разрешения, который расширяет базовое разрешение rest framework. Я пытаюсь передать аргумент allowed_groups, который будет списком всех групп, имеющих доступ к определенному представлению.
Вот моя текущая реализация пользовательских разрешений.
class CustomUserPermisions(BasePermission):
message = "Ooops! You do not have permissions to access this particular site"
def has_permission(self, request, view):
allowed_groups = [ 'group_hr', 'super_admin', 'employee']
user1 = Employee.objects.filter(user__email=request.user).first()
user_groups = user1.user_group.all()
for group in user_groups:
if group.title in allowed_groups:
return True
return False
Я попробовал добавить аргумент следующим образом.
class CustomUserPermisions(BasePermission, allowed_groups):
message = "Ooops! You do not have permissions to access this particular site"
def has_permission(self, request, view):
allowed_groups = [ 'group_hr', 'super_admin', 'employee']
user1 = Employee.objects.filter(user__email=request.user).first()
user_groups = user1.user_group.all()
for group in user_groups:
if group.title in allowed_groups:
return True
return False
но это ошибка, которую я получаю в настоящее время.
class CustomUserPermisions(BasePermission, allowed_groups):
NameError: name 'allowed_groups' is not defined
Есть ли лучший способ сделать это?
Я предполагаю, что вы новичок в python. Вам следует прочитать https://docs.python.org/3/tutorial/classes.html, чтобы лучше понять классы python.
class CustomUserPermisions(BasePermission, allowed_groups):
означает, что класс CustomUserPermisions
наследуется от классов BasePermission
и allowed_groups
. allowed_groups
не является классом, поэтому вы получите ошибку.
Вам следует создать атрибут класса для разрешенной группы :
class CustomUserPermisions(BasePermission):
def __init__(self, allowed_groups):
self.allowed_groups = allowed_groups
self.message = "Ooops! You do not have permissions to access this particular site"
def has_permission(self, request, view):
user1 = Employee.objects.filter(user__email=request.user).first()
user_groups = user1.user_group.all()
for group in user_groups:
if group.title in self.allowed_groups:
return True
return False
и затем вызвать конструктор класса :
permissions = CustomUserPermisions(['group_hr', 'super_admin', 'employee'])