Не уверены в подходе к пользовательским группам и разрешениям Django

#django #django-models #django-admin #usergroups

#django #django-модели #django-admin #группы пользователей

Вопрос:

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

Эти группы:

  • Читатель — анонимные пользователи и новые учетные записи; имеет разрешение на чтение только для всего содержимого
  • Требуется авторизация автора; имеет разрешения на чтение и создание; разрешения на редактирование и удаление только для собственного контента
  • Требуется вход модератора; имеет все разрешения CRUD для всего содержимого
  • Требуется администратор — вход в систему, имеет все разрешения (суперпользователь)

Все новые пользователи по умолчанию находятся в группе читателей. Автор будет либо назначен вручную, либо в конечном итоге с помощью онлайн-формы для определения соответствия требованиям. Модератор и администратор, конечно, будут назначены вручную.

Я подхожу к этому с возможным будущим развитием, например, позволяя группам пользователей легко распространяться на другие страницы веб-сайта. Например, скидка 5% для пользователей-авторов применяется ко всем товарам магазина и т. Д.

Какой подход к созданию групп пользователей был бы наилучшим для моей ситуации? Я видел, как это делается в панели администратора Django и путем создания пользовательских пользовательских моделей путем расширения классов AbstractBaseUser и UserBaseManager.

Ответ №1:

Я думаю, что расширение модели AbstractUser — хороший подход. Как насчет чего-то подобного?

 class CustomUser(AbstractUser):
    "Define the extra fields related to User here"""

    first_name = models.CharField(_('First Name of User'), blank=True, max_length=20)
    last_name = models.CharField(_('Last Name of User'), blank=True, max_length=20)

    #  - - - Some more User fields according to your need s

    class Meta:
        permissions = (("can_read_content", "To provide read facility on all content"),
       #---------------------
                       )
 

Комментарии:

1. При таком подходе я бы определил класс CustomUser для каждого типа пользователя, скажем, класс CustomUserReader? Или я буду создавать этот класс CustomUser для каждого типа пользователя?