我已经为此挣扎了几天。django.contrib.auth.models 有一个允许多个权限的 User 模型,但有 3 个标志用于 is_staff、is_superuser 和 is_active。
is_staff = models.BooleanField(_('staff status'), default=False, help_text=_('Designates whether the user can log into this admin site.'))
is_active = models.BooleanField(_('active'), default=True, help_text=_('Designates whether this user should be treated as active. Unselect this instead of deleting accounts.'))
is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_('Designates that this user has all permissions without explicitly assigning them.'))
groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True, help_text=_('The groups this user belongs to. A user will get all permissions granted to each of his/her group.'))
user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True, help_text='Specific permissions for this user.')
我无法理解的是为什么 is_staff 和 is_superuser 没有权限,您可以使用大约相同数量的代码来实现它,但出于某种原因,他们选择将这两个字段移动到模型上的布尔值。
我问的部分原因是因为我有类似的情况可以使用第三个布尔值(或者我可以在许可的情况下这样做),我试图理解为什么他们会将这两个与权限分开?
我想我理解 is_active,它允许您在某人返回时将其锁定而无需“修复”他们的权限(尽管您可以拥有 is_locked_out“权限”,但这听起来是错误的。)