【问题标题】:How can I check if a boolean from a different model is true for a user of a team?如何检查来自不同模型的布尔值对于团队用户是否为真?
【发布时间】:2022-02-11 02:54:51
【问题描述】:

我想使用以下模型向属于团队的用户添加权限:

class Rights(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

某些用户需要能够创建新条目。有些是不允许有这种可能性的。那么,如果某个用户发送了一个请求,我该如何检查这些布尔值中的一个或多个对于这个特定用户是真还是假?

【问题讨论】:

  • 同一个user-team组合可以有多个Rights吗?
  • 一个用户可以在多个团队中。一个独特的用户团队组合存在一次,并具有读取、写入、编辑的属性

标签: django django-rest-framework django-views


【解决方案1】:

您可以获取指向myuser和myteam的Rights对象,然后检查read、write和/或edit字段:

right = Rights.objects.get(user=myuser, team=myteam)
right.read  # bool, True or False
right.write  # bool, True or False
right.edit  # bool, True or False

您可以确保对于每个user/team 组合,最多有一条记录:

from django.conf import settings

class Right(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=('user', 'team'), name='unique_per_user_team')
        ]

注意:通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation。


注意:通常 Django 模型被赋予一个单数名称,所以Right而不是Rights。

【讨论】:

  • tysm 这很有帮助
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2022-07-31
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多