You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:48:03