#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 для каждого типа пользователя?