扩展Django的AbstractUser后生成额外认证表的疑问咨询
表的作用说明
auth 应用生成的表
auth_permission:Django auth 模块的全局权限存储表,所有模型默认的增删改查权限、自定义权限都会统一存在这里,只要你在INSTALLED_APPS中开启了django.contrib.auth就会生成该表。auth_group:用户组表,支持将用户划分到不同组,对组统一分配权限,同组用户可继承组的所有权限。auth_group_permissions:auth_group和auth_permission的多对多关系中间表,存储每个组绑定的权限数据。
core 应用生成的额外表
你之所以会生成这两张表,是因为你继承了AbstractUser类,该类默认内置了groups、user_permissions两个多对多字段,多对多关系在数据库层面必然会生成中间表:
core_user_groups:你的自定义User模型和auth_group的多对多中间表,存储每个用户所属的用户组。core_user_user_permissions:你的自定义User模型和auth_permission的多对多中间表,存储直接分配给单个用户的独立权限(不通过用户组继承的权限)。
这些表是否需要保留?
- 如果你需要用到Django自带的权限校验、admin后台权限管理、用户组功能,这些表都是必须的,AbstractUser自带的这些逻辑能帮你省去大量权限相关的自研代码,即使暂时用不上,保留这些表也不会对现有功能造成任何性能影响,不需要额外处理。
- 如果你完全不需要权限、用户组相关的功能,不想生成这些表,可以将自定义用户类的继承对象从
AbstractUser换成AbstractBaseUser,这个类仅包含用户登录、密码校验的核心逻辑,不会内置多对多权限相关字段,也就不会生成上述多余表。
内容的提问来源于stack exchange,提问作者davenull
相关产品推荐
相关产品推荐

