2015-05-28 25 views
17

我正在创建一个Django站点,它将有4种类型的用户;Django 1.8,多个自定义用户类型

  • 超级管理员:从本质上管理所有类型的用户
  • UserTypeA的:可以登录到网站,基本上都会有一些任意模型CRUD接口。也有额外的属性(具体信息,只有属于类型A用户)
  • UserTypeB:可以登录到网站,并有专门涉及到的TypeB用户额外的信息,还可以创建和管理TypeC用户帐户
  • UserTypeC:可以登录到并且具有仅与TypeC用户有关的额外信息。

注意到我打算创建一个自定义界面,而不是使用内置的管理界面。什么是实现这种用户结构的最佳方法?我更喜欢使用Django的内置身份验证系统(它管理密码salting和散列,以及会话管理等),但是如果安全和生产准备就绪,我会开放使用其他身份验证系统。

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

编辑:是否有可能通过为每个用户类型使用应用程序来完成此操作,如果是的话,这将如何使用单个登录屏幕完成。

+2

您是否找到解决方案?您可以使用不同用户类型的组来处理,然后根据注册时的某些值将人员分配到正确的组。 – Frankline

+0

为什么你不使用django的内建权限/组。 –

回答

18

首先,您不能为一个项目创建多个身份验证用户群。所以你必须使用提供的Django用户认证,并将其分发给多种类型的用户。 Django用户在注册时需要提供一些默认值(尝试在Django Admin中创建用户)。你可以做的是创建一个名为'CustomUser'的模型,并从AbstractUser继承。这将使您的'CustomUser'模型成为项目用户的默认模型。由于您从AbstractUser继承,此“CustomUser”模型将包含原始用户模型中的每个字段,然后您可以自行添加一些字段。您还需要在项目的settings.py文件中指定原始用户模型不再是您的默认认证模型,它是您将用于认证的新“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

如果不同的用户类型需要收集不同的数据字段,那么通过此方法指定的内容如何? –

+0

不唯一的字段进入'CustomUser'类,所有用户都通用的字段进入'UserDetails'。另外,它不是'ForeignKey',应该是'OneToOneField'。 – MiniGunnR

+0

我有类似的要求,我必须管理多种使用类型, 1.人才 - 可以是演员,舞者,歌手等 2.制造商 - 可以导演,导演,编舞,音乐总监等 我如何维护不同类型的用户? – Kishan

相关问题