能否向permission_required传入列表?基于类视图多权限校验问询
基于PermissionRequiredMixin的多权限校验实现方案
Django 原生的PermissionRequiredMixin本身就支持直接传入包含多个权限的列表,默认规则是用户需要同时持有列表内的所有权限,才可以访问对应的视图。
基础使用示例(同时满足所有权限)
直接将多个权限组成的列表赋值给permission_required属性即可:
from django.contrib.auth.mixins import PermissionRequiredMixin from django.views.generic import ListView from .models import Post class PostManageView(PermissionRequiredMixin, ListView): model = Post # 此处传入权限列表,用户需要同时拥有两个权限才可访问 permission_required = ["blog.add_post", "blog.change_post"]
自定义校验逻辑(满足任意权限即可)
如果你需要实现「用户满足任意一个权限就可访问」的需求,需要重写has_permission方法自定义校验规则:
class PostOperateView(PermissionRequiredMixin, ListView): model = Post # 自定义任意权限列表 any_permission_required = ["blog.add_post", "blog.delete_post", "blog.change_post"] def has_permission(self): # 校验用户是否持有列表中任意一个权限 return any(self.request.user.has_perm(perm) for perm in self.any_permission_required)
注意事项
- 权限字符串的标准格式为
应用名.权限codename,你可以在Django后台的权限管理页面查看每个权限对应的准确codename - 如果你重写了
has_permission方法,最终权限校验结果以该方法的返回值为准,原生的permission_required属性校验逻辑会被覆盖
内容的提问来源于stack exchange,提问作者Mohammad Javad Shamloo
相关产品推荐
相关产品推荐

