我有一个自定义权限类,它扩展了其余框架的基本权限。我正在尝试传递一个参数
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):
名称错误:名称“allowed_groups”未定义
有更好的方法可以做到这一点吗?
我猜你是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'])