为何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面板截图

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

