1

给定 MySQL 中具有“国家”字段的行的表,我需要向用户提供权限。本质上,我想说“X 用户可以访问德国 + 法国 + 加拿大”,但“Y 用户可以访问法国 + 美国”。我认为一个好的方法可能是使用 Django 的组(即 - 每个国家有 1 个组,并相应地添加人员)。我的问题是,出于安全原因,我想确保查询一组授权数据。

例如,一种方法是为每个可能的组合(仅限德国,德国 + 法国,几乎无限)创建一个视图 im MySQL,但鉴于潜在排列的数量,这显然是不可行的。我可以为每个国家/地区创建 1 个视图,并分别查询每个视图,但是如果允许用户访问 20 个不同的国家/地区,我会对数据库施加很大压力。

那么,我如何才能高效、安全地查询这些数据,以确保 100% 确保我只会取回授权数据?

PS:不一定在SQL级别。如果 Django 有一些功能允许我这样做,我会很好的。

4

1 回答 1

1

您可以创建一个与用户具有多对多关系 的单独Country模型,并在访问模型时跨该关系进行查询。

class Country(models.Model):
    name = models.CharField(max_length=64)
    iso_code = models.CharField(max_length=2)
    users = models.ManyToManyField("auth.User")

class MyModel(models.Model):
    country = models.ForeignKey(Country)
    ...

MyModel.objects.filter(country__users=current_user)
于 2012-06-27T20:58:33.527 回答