2012-06-26 34 views
1

给定一个MySQL表中有一个'Country'字段的行,我需要为用户提供权限。从本质上讲,我希望能够说“X用户可以访问德国+法国+加拿大”,但“Y用户可以访问法国+美国”。我认为一个好的方法可能是使用Django的组(即 - 每个国家有1个组,并相应地添加人员)。我的问题是,我想确保我正在查询一组授权数据,出于安全原因。例如,一种方法是针对每种可能的组合(仅德国,德国+法国,几乎无限)创建一个视图即时MySQL,但显然这并不适用于给定潜在排列的数量。我可以在每个国家/地区查看1个视图,并分别查询每个视图,但是如果允许用户访问20个不同的国家/地区,则会对数据库施加很大的压力。中级安全层(Django/SQL)

所以,我怎么能高效,安全地查询此数据,以确保100%,我将永远只能拿回授权的数据?

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

回答

1

您可以创建一个单独的国家模型,与用户建立多对多关系,并在访问模型时查询整个关系。

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)