Настройка роли пользователя для чтения/редактирования проекта за проектом, Django ORM

Я пытаюсь реализовать отношения между тремя таблицами: User Project и Permissions

У меня уже есть ManyToMany отношения между User и Project

class CustomUser(AbstractUser):
  username = models.CharField(unique=True, max_length=20, null=False, blank=False)
  // etc...

class Project(models.Model):
  user = models.ManyToManyField(CustomUser, related_name="projects")

Теперь я пытаюсь добавить таблицу разрешений. Чтобы User мог принимать разные роли в разных проектах.

class Permissions(models.Model):
  can_read = models.BooleanField(default=True)
  can_read_and_edit = models.BooleanField(default=False)
  // etc...

Какой лучший подход в этой ситуации. Должен ли я добавить таблицу Permission в отношение manytomany в качестве третьей таблицы? Или есть лучший способ достичь этого

Вы можете использовать пользовательскую модель through для добавления деталей к отношению "многие-ко-многим" следующим образом:

class CustomUser(AbstractUser):
    pass


class Project(models.Model):
    users = models.ManyToManyField(CustomUser, through='ProjectDetails')


class Permission(models.Model):
    pass


class ProjectDetails(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    permission = models.ForeignKey(Permission, on_delete=models.CASCADE)

Таким образом, каждому пользователю проекта может быть назначено определенное разрешение (для каждого проекта). Вы также можете добавить более подробную информацию об участии определенного пользователя в проекте. Например, когда они начали работать в проекте.

Если вы хотите узнать больше, вы можете прочитать здесь.

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