Как создать иерархические отношения родитель/ребенок с определенными правами в уже созданном приложении Django (DRF)

Мне нужно создать модель данных в уже существующем приложении Django, которое использует DRF, и я совсем новичок в Django.

Правила таковы:

  • Есть ParentOrganizations и ChildOrganizations, к которым Users может принадлежать.
  • У ParentOrganization может быть много ChildOrganizations
  • .
  • Пользователь приложения может принадлежать ко многим ChildOrganizations, но все ChildOrganizations, к которым они принадлежат, должны принадлежать одному родителю.
    • Здесь есть оговорка, что внутренние суперпользователи будут иметь доступ ко всем родительским и дочерним организациям
    • .
  • Пользователь приложения может иметь различные разрешения для каждого ChildOrganization, к которому он принадлежит.
  • Мы будем использовать Django Admin для создания пользователей и назначения их родительским и дочерним организациям вместе с разрешениями для каждой дочерней организации
  • .

Несколько вопросов и немного кода:

  1. Это приложение уже существует, так что, похоже, я упустил возможность создать пользовательский класс без некоторых сложностей. Оправдывает ли что-нибудь из вышеперечисленного расширение auth.User? Я думаю, что в этом нет необходимости.
  2. Может ли встроенные в Django группы и роли быть подходящим способом для достижения этой цели? Я беспокоюсь о том, чтобы не зациклиться на чем-то, поскольку наши сценарии использования становятся все более сложными.
  3. Предположим, что я создам это на заказ, как будет выглядеть этот код?
class ParentOrganization(models.Model):
    name = models.CharField(max_length=100)
    users = models.ForeignKey(User, on_delete=models.CASCADE)

class ChildOrganization(models.Model):
    parent = models.ForeignKey(ParentOrganization, on_delete=models.CASCADE)
    name = models.CharField(max_length=300)
    users = models.ForeignKey(User, on_delete=models.CASCADE)


class ChildOrganizationPermissions(models.Model):
    users = models.ForeignKey(User, on_delete=models.CASCADE)
    child_organization = models.OneToOneField(ChildOrganization, on_delete=models.CASCADE)
    can_view = models.BooleanField()
    can_order = models.BooleanField()
Вернуться на верх