Django: Добавление пользователя в группу разрешений более одного раза

У меня есть приложение, содержащее пользователей, которые могут принадлежать к нескольким организациям и через задание с определенной ролью для каждой. Каждая роль имеет определенные разрешения для контроля того, что может делать задание.

Я планирую использовать встроенные разрешения Django, чтобы создать группу разрешений для каждой роли и назначить их пользователю. Однако, с точки зрения дизайна, назначение группы прав пользователю не кажется правильным, потому что права принадлежат роли, специфичной для конкретной работы, которая может быть у нескольких организаций. Это создает запутанную логику при удалении должности, так как я должен проверить, есть ли у пользователя другая должность с той же ролью, прежде чем добавлять или удалять разрешения для пользователя.

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

например, что я хочу сделать

from django.contrib.auth.models import Group
sales_group = Group.objects.get_or_create(name='sales')

sales_job = request.user.job.filter(role='sales', organization__name="Google")
sales_job_two = request.user.job.filter(role='sales', organization__name='Microsoft')

#is it possible to do this ???
sales_group.add(user, job=sales_job_one)
sales_group.add(user, job=sales_job_two)

models.py

class Users:
  first_name = models.CharField(max_length=255)
  last_name = models.CharField(max_length=255)
  is_active = models.BooleanField(default=False)

class Organizations(models.Model):
  name = models.CharField(max_length=255)
  industry = model.CharField(max_length=255)
  country = model.CharField(max_length=255)

class Job(models.Model):
  role_choices = (
    ('sales', 'sales'),
    ('engineering', 'engineering'),
    ('management', 'management')
  )
  user = models.ForeignKey(User.on_delete=models.CASCADE)
  organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
  role = models.CharField(choices=role_choices)
  

Вернуться на верх