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

时间:2015-05-28 01:59:07

标签: python django authentication

我正在创建一个有4种类型用户的Django站点;

  • 超级管理员:基本上管理所有类型的用户
  • UserTypeA:可以登录到网站,基本上会有一些任意模型的CRUD界面。还有额外的属性(仅适用于TypeA用户的特定信息)
  • UserTypeB:可以登录网站并拥有专门针对TypeB用户的额外信息,也可以创建和管理TypeC用户帐户
  • UserTypeC:可以登录网站并拥有仅适用于TypeC用户的额外信息。

注意到我计划创建自定义界面而不使用内置管理界面。实现此用户结构的最佳方法是什么?我更喜欢使用Django的内置身份验证系统(管理密码salting和散列,以及会话管理等),但如果它是安全的并且生产就绪,我将愿意使用其他一些身份验证系统。< / p>

编辑另外,我的计划是使用1个登录屏幕访问该网站,并利用权限和用户类型来确定每个用户的信息中心可用的内容。

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

2 个答案:

答案 0 :(得分:19)

首先,您无法为项目创建多个身份验证用户群。因此,您必须使用提供的Django用户身份验证,并将其分配给多种类型的用户。 Django用户在注册期间需要提供一些默认值(尝试在Django Admin中创建用户)。你可以做的是创建一个名为&#39; CustomUser&#39;并继承自AbstractUser。这将使您的&#39; CustomUser&#39;为项目用户建模默认值。因为您继承了AbstractUser这个&#39; CustomUser&#39; model将包含原始Users模型中的每个字段,然后您可以自己添加一些字段。您还需要在项目的settings.py文件中指定原始用户模型不再是您的默认身份验证模型,它是您新的&#39; CustomUser&#39;将用于身份验证的模型。看看以下代码是否有帮助。

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模型创建的应用。

希望这有帮助。

答案 1 :(得分:0)

您应该只需要使用Groups Django机制-您需要创建四个组(例如userA),并说出common,并检查用户是否在第一组或第二组中-然后向他显示适当的视图