Настройка роли пользователя для чтения/редактирования проекта за проектом, 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)
Таким образом, каждому пользователю проекта может быть назначено определенное разрешение (для каждого проекта). Вы также можете добавить более подробную информацию об участии определенного пользователя в проекте. Например, когда они начали работать в проекте.
Если вы хотите узнать больше, вы можете прочитать здесь.