将参数传递给 django 中的自定义权限类

问题描述 投票:0回答:1

我有一个自定义权限类,它扩展了其余框架的基本权限。我正在尝试传递一个参数

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 django django-rest-framework django-views django-permissions
1个回答
1
投票

我猜你是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'])

© www.soinside.com 2019 - 2024. All rights reserved.