nekrasov444
@nekrasov444

Как верно реализовать пользователей в django?

Здравствуйте, в моем проекте 3 вида пользователей Диспетчер (управляет всеми заказами), Испонитель (просматривает свои выполненные заказы), Клиент (просматривает свои заказы).
Поля пользователя у этих 3х групп разные, страницы личного кабинета разные.

Как можно это реализовать максимально правильно?

Я думаю сделать так: Сделать app на каждую группу и добавить нужные поля каждой группе, а этот app соединить с стандартным user что бы не ломать систему авторизации далее навесить права (типа поле пермисион с нужной группой прав или просто прямо расписать возможности каждого исходя из выбранной функции в пермисион)

Может есть вариант сделать это проще или лучше?
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 2
@AstraVlad
Финансист, консультант, программист-любитель
Как-то избыточно сложно описано. Да, будут три личных кабинета, при логине пользователя проверяем какая группа ему присвоена и, в зависимости от результата, делаем редирект на нужный URL личного кабинета. Там для верности делаем вьюшку @login_required и @permission_required /@user_passes_test что уж удобнее и показываем нужный личный кабинет.

Делать ли отдельные аппы (и отдельные URL) под каждый ЛК или сделать отдельными вьюшками в одном апп (с URL вида "/personal/admin", "/personal/manager/" и т.д.) это уже на мой взгляд вопрос вкуса.
Ответ написан
nekrasov444
@nekrasov444 Автор вопроса
from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=30, blank=True)
    phone = models.CharField(max_length=12, blank=True)
    user_active = models.BooleanField(default=True)
    user_about = models.TextField(blank=True)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()


class Auto(models.Model):
    Profile = models.OneToOneField(Profile, on_delete=models.CASCADE)


class Work(models.Model):
    Profile = models.OneToOneField(Profile, on_delete=models.CASCADE)


Если я сделаю так с полями: общий профиль для пользователь и к нему один к одму подключу доп. поля Автомобили и Рабочие и вот они будут доступны для заполнения только определенной группе

Так будет сделать правильно? или лучше сделать связь второстепенных таблиц не с профилем а с юзером
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы