Подтвердить что ты не робот

Django 1.8, несколько пользовательских типов пользователей

Я создаю сайт Django, который будет иметь 4 типа пользователей;

  • Super Admin: по существу управляет всеми типами пользователей.
  • UserTypeA: Могут войти на сайт и в основном иметь CRUD-интерфейс для какой-либо произвольной модели. Также есть дополнительные атрибуты (конкретная информация, относящаяся только к пользователям TypeA).
  • UserTypeB: может подключаться к сайту и иметь дополнительную информацию, относящуюся конкретно к пользователям TypeB, также может создавать учетные записи пользователей TypeC и управлять ими.
  • UserTypeC: может зайти на сайт и получить дополнительную информацию, относящуюся только к пользователям TypeC.

Отмечая, что я планирую создать настраиваемый интерфейс и не использовать встроенный интерфейс администратора. Какой был бы лучший способ для реализации этой пользовательской структуры? Я бы предпочел использовать встроенную систему аутентификации Django (которая управляет приложением и хэшированием паролей, а также управлением сеансами и т.д.), Но я был бы открыт для использования какой-либо другой системы аутентификации, если она безопасна и готова к производству.

EDIT:. Кроме того, мой план состоит в том, чтобы использовать 1 экран входа в систему для доступа к сайту и использовать разрешения и тип пользователя для определения того, что будет доступно на каждой пользовательской информационной панели.

EDIT:. Можно ли выполнить это, используя приложение для каждого типа пользователя, и если да, то как это сделать с помощью одного экрана входа.

4b9b3361

Ответ 1

Прежде всего, вы не можете создать несколько пользовательских баз аутентификации для проекта. Таким образом, вы должны использовать предоставленную пользователю аутентификацию Django и разворачивать ее для нескольких типов пользователей. Пользователь Django имеет некоторые значения по умолчанию, которые необходимо предоставить во время регистрации (попробуйте создать пользователя в Django Admin). Вы можете создать модель под названием "CustomUser" и наследовать от AbstractUser. Это сделает вашу модель CustomUser по умолчанию для пользователей проекта. Поскольку вы наследуете от AbstractUser, эта модель CustomUser будет иметь каждое поле из исходной модели Users, а затем вы можете добавить поле самостоятельно. Вам также необходимо указать в файле 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, которая также имеет отношение ForeignKey к вашей новой модели проверки подлинности. Последнее, что вам нужно сделать, - это файл settings.py.

AUTH_USER_MODEL = 'index.CustomUser'

Здесь index - это приложение, в котором создана моя модель CustomUser.

Надеюсь, что это поможет.