我想将 Django 应用程序的用户分为两个类:
- Admin(使用 Django admin 的用户) - 继承自
AbstractUser
AbstractBaseUser
我想将这两种用户分开,因为
AbstractUser
(is_staff
,is_superuser
,groups
,permissions
)的所有字段对于我的客户用户来说都是无用的,对于权限和组来说,我只想实施不同的事情。所以,我想用AbstractBaseUser
。
但是对于 django 管理员用户,
AbstractUser
类来说,它非常完美,尤其是权限功能。
class Admin(AbstractUser):
pass
class Customer(AbstractBaseUser):
pass
但是现在,有没有一种方法可以精确地仅用于 django 管理员
Admin
使用的用户模型?
并对我的其余应用程序使用 Customer
模型。
我是否必须从头开始实现这个:
class MyUser(AbstractBaseUser):
username = models.CharField(max_length=30, unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
is_active = models.BooleanField(default=False)
class Admin(MyUser, PermissionsMixin):
is_staff = models.BooleanField(default=True)
class Customer(MyUser):
# specific fields
pass
通过此实现,如果我将
AUTH_USER_MODEL
设置为 User
,则权限将不起作用,因为 User
没有 permissions
、is_superuser
和 is_staff
字段。
如果将其设置为
Admin
,我将无法使用 Customers
验证 django.contrib.auth
。
那么大家有办法解决这个问题吗?
Django 为您提供的方式似乎更加灵活且适应未来。
User
模型,您可以覆盖该模型。无论如何,该模型有权限、组等。OneToOne
配置文件模型。User.is_staff
属性。通过这种方式,你可以获得很多很酷的东西(与两个完全不同的用户模型相比):
contrib.auth
和contrib.admin
模块。admin_site.has_permission()
即可。也就是说,与收益相比,开销可以忽略不计。我强烈建议保留 Django 的默认
User
模型,并在必要时扩展它。