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)