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

如何在自定义Django后台面板中展示并管理角色、用户组与权限

Django自定义后台实现权限、角色、组管理的解决方案

方案1:直接复用Django原生Auth体系(最简便,可1:1还原Admin权限展示效果)

Django自带的django.contrib.auth已经内置了完整的RBAC(基于角色的访问控制)实现,包含三个核心模型:

  • User:用户模型
  • Group:用户组/角色模型
  • Permission:权限模型

你完全不需要重写底层逻辑,直接查询这些模型的数据渲染到自定义后台模板即可,操作方法如下:

1.1 按Admin的规则分组查询权限

Admin的权限页面是按「应用->模型->操作权限」三级分组展示的,你可以用如下代码在视图中获取结构化的权限数据:

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission

def get_structured_permissions():
    structured_perms = {}
    # 遍历所有内容类型(对应每个注册的模型)
    for content_type in ContentType.objects.all():
        app_label = content_type.app_label
        model_name = content_type.model
        # 获取当前模型对应的所有权限
        model_perms = Permission.objects.filter(content_type=content_type)
        if not model_perms.exists():
            continue
        # 按应用分组
        if app_label not in structured_perms:
            structured_perms[app_label] = {}
        # 按模型分组
        structured_perms[app_label][model_name] = model_perms
    return structured_perms

把返回的structured_perms传递到模板,按层级渲染即可实现和Admin完全一致的权限展示效果。

1.2 权限/组分配操作

Django已经内置了关联操作方法,不需要自己写中间表逻辑:

  • 给用户分配权限:user.user_permissions.add(perm1, perm2...)
  • 移除用户权限:user.user_permissions.remove(perm1, perm2...)
  • 给组分配权限:group.permissions.add(perm1, perm2...)
  • 把用户加入组:user.groups.add(group1, group2...)

分配后权限校验逻辑也可以直接用Django自带的user.has_perm()方法,不需要额外开发。


方案2:使用第三方包扩展能力

如果你需要比原生更复杂的权限能力(比如对象级权限、角色继承、自定义权限规则等),Django生态有成熟的第三方包可以用,类似Laravel的Spatie:

  • django-guardian:支持对象粒度的权限控制,原生兼容Django Auth体系
  • django-rbac:专门的RBAC扩展包,支持多角色、角色层级、权限继承等高级功能
  • django-admin-rbac:针对自定义后台的RBAC封装,可快速复用Admin的权限逻辑

方案3:手动实现(不推荐)

只有当你有非常特殊的自定义权限规则,原生和第三方包都无法满足时才需要手动实现,常规后台场景完全不需要重复造轮子。

内容的提问来源于stack exchange,提问作者sam hassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:02