在my Django应用程序中实现用户类型限制
我一直在两个关于创建自定义用户模型的教程之间来回切换: 及 到目前为止,我的代码如下: 型号:在my Django应用程序中实现用户类型限制,django,django-models,django-forms,django-admin,django-users,Django,Django Models,Django Forms,Django Admin,Django Users,我一直在两个关于创建自定义用户模型的教程之间来回切换: 及 到目前为止,我的代码如下: 型号: class CustomUser(AbstractUser): is_admin = models.BooleanField('admin status', default=False) is_areamanager = models.BooleanField('areamanager status', default=False) is_sitemanager = mode
class CustomUser(AbstractUser):
is_admin = models.BooleanField('admin status', default=False)
is_areamanager = models.BooleanField('areamanager status', default=False)
is_sitemanager = models.BooleanField('sitemanager status', default=False)
表格:
管理员:
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['email', 'username',]
admin.site.register(CustomUser, CustomUserAdmin)
我在这一点上碰到了一堵墙。我不确定将内容限制在用户身上的方向。我的总体想法是,我希望管理员能够访问所有内容,区域经理拥有下一级访问权限,站点经理拥有下一级访问权限,然后普通用户(所有布尔检查都为false)拥有基本权限
这是实现这种方法的最佳途径吗?我应该从这里走到哪里?为什么?不要扩展AbstractUser、user Django内置组和权限来创建具有不同权限的用户类: 如果需要向用户添加更多信息,常用模式是创建用户配置文件:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
address = models.CharField(max_length=140)
age = ...
有几点建议:
- 仅在特定用例中使用AbstractUser(例如,当您需要自定义AuthenticationBackend时)
- 在模型中使用用户ID而不是用户配置文件ID作为FK(从请求中检索它更容易)
- 对于基本用例,只需在UserProfile中添加一个“role”字段就足以实现一个简单的逻辑
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
address = models.CharField(max_length=140)
age = ...