我正在寻找一种安全的方法来保护组织免受访问,因为在我整个项目中,其他组织的客户都会看到该组织的客户。一个组织的用户永远都不会看到其他组织的用户,我想知道是否可以采用结构性的方式来设置项目,以防止我犯编码错误并将错误数据泄露给错误用户。
当前,我只是按组织过滤所有“客户”查询,但是我担心在某个时候我可能会在某个地方出现漏洞。
我当时想我可以为Client创建一个自定义模型管理器,以便Client.objects.all()或Client.custommanager.all()需要一个组织
好奇是否还有其他/更好的方法?
我具有以下简化的模型结构:
class Organisation(models.Model):
name = models.CharField(null=True, verbose_name = 'Name', max_length=100)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
organisation = models.ForeignKey('Organisation', null=True, on_delete=models.CASCADE)
class Client(models.Model):
advisor = models.ForeignKey(User, on_delete=models.CASCADE)