Django 1.8,多个自定义用户类型

22

我正在创建一个Django网站,将有4种类型的用户:

  • 超级管理员:实质上管理所有类型的用户
  • UserTypeA:可以登录网站,并基本上为某些任意模型具有CRUD接口。还具有额外的属性(仅适用于TypeA用户的特定信息)
  • UserTypeB:可以登录网站,并具有仅适用于TypeB用户的附加信息,还可以创建和管理TypeC用户帐户
  • UserTypeC:可以登录网站,并具有仅适用于TypeC用户的附加信息。

需要注意的是,我计划创建一个自定义接口,而不是使用内置的管理员接口。实现此用户结构的最佳方法是什么? 我宁愿使用Django的内置身份验证系统(管理密码盐和哈希,以及会话管理等),但如果有其他安全且适用于生产的身份验证系统,我也可以采用。

编辑:另外,我的计划是使用1个登录屏幕访问网站,并利用权限和用户类型来确定每个用户仪表板上可用的内容。

编辑:是否可以通过为每种用户类型使用一个应用程序来实现此目的,如果可以,如何在单个登录屏幕上完成此操作。


2
你找到解决方案了吗?你可以使用组来处理所需的各种用户类型,然后根据注册时的某些值将人员分配到正确的组。 - Frankline
为什么不使用Django内置的权限/组? - Ozan Ertürk
2个回答

22

首先,你不能为一个项目创建多个认证用户库。因此,你需要使用Django提供的用户认证并对其进行修改以适用于多种类型的用户。Django用户在注册过程中需要提供一些默认值(尝试在Django管理页面中创建用户)。你可以创建一个名为“CustomUser”的模型,并从AbstractUser继承。这将使您的“CustomUser”模型成为项目用户的默认模型。因为您从AbstractUser继承,所以这个“CustomUser”模型将拥有来自原始用户模型的每个字段,然后您可以添加自己的一些字段。您还需要在项目的settings.py文件中指定,原始的Users模型不再是您的默认认证模型,而是您的新“CustomUser”模型将用于认证。请参考以下代码。

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    type_choices = (
        ('SU', 'Super User'),
        ('A', 'User Type A'),
        ('B', 'User Type B'),
        ('C', 'User Type C'),
    )
    user_type = models.CharField(max_length=2,
                                 choices=type_choices,
                                 default='C')

class UserDetails(model.Model):
    type = models.OneToOneField('CustomUser')
    extra_info = models.CharField(max_length=200)
在上述代码中,您已创建了CustomUser模型,其中用户可以提供基本信息,例如用户名、密码等,这是Django的默认设置。然后,您选择用户类型并将其他信息保存在UserDetails模型中,该模型还具有与您的新认证模型的OneToOne关系。您需要做的最后一件事是在settings.py文件中进行以下设置: AUTH_USER_MODEL = 'index.CustomUser' 在此处,index是我的CustomUser模型所在的应用程序。
希望这可以帮助到您。

4
如果不同的用户类型需要收集不同的数据字段,那么如何通过这种方法进行指定? - Adam Starrh
不唯一的字段放在“CustomUser”类中,所有用户共有的字段放在“UserDetails”中。此外,它不是“ForeignKey”,应该是“OneToOneField”。 - MiniGunnR
我有类似的需求,我需要管理多种用户类型,
  1. 才能 - 可以是演员、舞者、歌手等
  2. 制作者 - 可以是导演、卡司导演、编舞、音乐总监等
如何维护这么多不同类型的用户?
- Kishan Mehta
3
您可以在UserDetails模型中创建一个子类型字段,或者单独创建所有的模型类型。例如:类型可以是Talent-演员、Talent-舞者、Talent-歌手、Maker-导演、Maker-演员导演、Maker-编舞、Maker-音乐导演等。请阅读《Django设计模式与最佳实践》第三章有关模型的内容。这是适合初学者和中级编码人员的最佳书籍! - MiniGunnR

0
你只需要使用 Django 的组机制 - 你需要创建四个组,比如 userA 和 common,并检查用户是否在第一或第二组中 - 然后显示相应的视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接