【发布时间】:2020-07-17 07:15:52
【问题描述】:
我使用 Django 已经有一段时间了,但直到现在我才想到这一点。
目前,我有一个包含不同用户级别的项目。通常,根据我过去的经验,我只使用 Django 开发系统,只有两个用户级别,即超级用户和普通/普通用户。所以我的问题是在模型/数据库中呈现这些不同用户级别的有效方法是什么?这里,我将以一个学校系统为例,并提供一些我的初步想法实施它。
用户等级:
- 管理员(超级用户和员工)
- 校长
- 老师
- 学生
方法#1:根据每个用户级别添加新表
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
user = models.CharfieldField(max_length = 10, unique = True)
class Admin(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Pricipal(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
方法#2:在用户模型中添加额外的用户类型属性
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
user = models.CharfieldField(max_length = 10, unique = True)
is_superuser = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
is_principal = models.BooleanField(default = False)
is_teacher = models.BooleanField(default = False)
is_student = models.BooleanField(default = False
'''
User table in DB:
user | is_superuser | is_staff | is_principal | is_teacher | is_student
'''
我的想法:
在方法 #1 中,由于内置的 User 模型有两个字段,is_staff 和 is_superuser,是否可以像上面的示例一样将字段实现/更改为 SuperUser/Admin 表?这意味着当我创建一个管理员/超级用户时,我希望它在 Admin 表中添加一个新行,而不是添加一个新用户并将用户的 is_superuser 和 is_staff 字段更新为内置用户模型中的 1。
在方法 #2 中,问题在于具有不同访问权限的表直接连接到它。例如,Salary 模型(Student 用户无法访问)与 User 模型(包含 Student 用户)有直接链接。
我希望我能够获得一些见解以及适当有效的实施方式,以防止将来出现任何实施不便和错误。非常感谢。
【问题讨论】:
-
@IainShelvington 组不是用于根据访问权限对用户进行分类吗?
标签: python mysql django database web