2012-06-26 31 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)