起步
这是许多开发者在项目初期要面临的一个普遍问题。要怎样来处理多用户类型。
本文讲介绍对于不同场景和业务需求如何设计用户模型。为项目提供指导设计。
设计之前
在梳理用户设计之前,有几个前提需要遵守。
1. 不要使用 Django 内置的 User 模型,尽管它能满足应用程序的所有要求。
正如官方 Django文档 强烈建议为新项目使用自定义用户模型。需求总是在变,只用固定的模型不太现实,并且一旦设置了 AUTH_USER_MODEL
后续再修改就很麻烦了。
2.无论最后选择什么方案,无论有什么业务,都始终只使用一个 Django 模型来处理身份验证。
永远都使用一个用户模型,这就是标题为什么是处理多用户类型而不是多用户模型。这也就能使用统一的身份认证机制。它仍然可以拥有多种用户类型。
方案
不同的项目要求设计出来的方案也是不同的,不妨先问问自己这几个问题:
- 需要维护多少种用户类型?
- 用户可以同时拥有多种角色吗?比如用户可以同时成为学生或老师吗?
- 不同用户类型是否需要存储不同的信息?
一种非常常见的情况就是拥有普通用户和管理员。在这种场景下,可以使用内置的 is_staff
来区分普通用户和管理员。实际上,内置模型中有两个字段来处理这种情况: is_staff
和 is_superuser
。 is_staff
标志着用户是否允许登录 Django Admin 页面,至于该用户能做什么或不能做什么,就由权限框架来授权。而 is_superuser
是一个额外的标志,意味着拥有所有权限。所以这里可以看出来,