В моем проекте мне приходится иметь дело с разными типами пользователей, например. costumers и работодатели. У каждого типа пользователей есть свои поля и разрешения: заказчик может покупать вещи, тогда как работодатель не может.Лучший способ обработки нескольких типов пользователей в Django
Я прочитал документацию Django и, похоже, есть два варианта:
- Costumize
AbstractUser
класса и добавляющих всех Полей костюмеров и работодателей. Затем используйте систему разрешений для предоставления разрешения/отзыва или создания группы для каждого типа пользователей. Недостатком здесь является то, что неиспользуемые поля. принять модель прокси:
Этот случай кажется более разумным, но я не знаю, как справляться с разрешениями. Подумайте, я бы хотел использоватьfrom django.contrib.auth.models import User from django.db import models
class Costumer(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE)
class Meta: db_table = 'costumers' permissions = ( ("access_this", "User may access this"), ) ordering = []
класса Employee (models.Model): пользователя = models.OneToOneField (Пользователь, on_delete = models.CASCADE)
class Meta: db_table = 'employers' permissions = ( ("access_that", "User may access that"), ) ordering = []
@permission_required
вместо проверки типа (если у пользователя есть конкретное поле), потому что кажется более легитимным для системы Django.
Итак, в конце концов, как лучше всего подойти к такому сценарию?
Мне нравится прокси-модель, с точки зрения кодирования.Когда вы хотите получить данные Costumer, вы начинаете с Costumers.some_things_set.filter (...), а от Employee вы начинаете с Employee.other_things_set.filter (...). Меньше подвержены ошибкам (ошибочно показывающие информацию Costumers для сотрудников и наоборот), и легче читать код. –
Проблема в том, что я не знаю, как использовать разрешения в этом случае, т.е. ограничить доступ к costumer/работодателю – blueSurfer
двум группам, каждый из которых принадлежит одному из них https://docs.djangoproject.com/en/1.9/ themes/auth/default/# permissions-and-authorization –