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

为何Django会自动向用户组添加未手动配置的权限?

问题描述

我在后端创建用户组时,通过Admin面板发现组中存在一些未手动添加的额外权限。相关代码及Admin面板截图如下,请问该现象的原因是什么?

相关代码(models.py)

produccion_group, created = Group.objects.get_or_create(name="Produccion y cuentas")
produccion_group.permissions.add(
    Permission.objects.get(codename='add_brand'),
    Permission.objects.get(codename='change_brand'),
    Permission.objects.get(codename='view_brand'),
    Permission.objects.get(codename='add_expense'),
    Permission.objects.get(codename='change_expense'),
    Permission.objects.get(codename='view_expense'),
)
produccion_group.save()

Admin面板截图

Admin面板中用户组的额外权限

原因分析
  • 代码重复执行导致权限追加:get_or_create仅在组不存在时创建新组,但这段代码如果在服务启动、迁移完成等场景下重复执行,permissions.add()是追加权限而非覆盖。只要之前通过Admin手动添加过权限,或者代码历史版本中添加过其他权限,都会保留在组里,不会被当前代码清除。
  • 数据库数据残留:如果之前手动修改过数据库中该组的权限记录,或者旧的迁移操作遗留了权限关联,当前代码的追加逻辑会叠加这些已有权限,导致出现额外项。
  • 第三方库或自动权限关联:若项目使用了第三方权限管理插件,或者模型定义时配置了自动生成的额外权限,这些权限可能通过隐式逻辑自动关联到该用户组,而非代码显式添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:42:26