中间安全层(Django / SQL)

时间:2012-06-26 01:24:00

标签: sql django security

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

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

那么,我如何有效和安全地查询这些数据,以便100%确定我只能获得授权数据?

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

1 个答案:

答案 0 :(得分: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)