2011-07-07 37 views
0

我正在研究面向企業解決方案的面向django應用程序的用戶。目前,用戶能夠將網站上的數據分類爲私人收藏,只有他們自己才能看到。功能要求是管理員能夠查看其下屬的私人收藏。如何根據用戶層次結構授予查看頁面的權限

我的問題是,實現這個層次結構的最佳解決方案是什麼?我想到了幾個解決方案:

  • 從用戶到用戶名稱管理器的外鍵。創建一個@user_passes_test測試,通過從集合所有者角度看管理者關係遞歸,直到a)發現請求用戶是經理,或者b)經理是空的,表明請求用戶沒有權限訪問此頁面。
    • 優點:簡單的層次準確地與最小數據表示
    • 缺點:大型層次結構導致許多查詢
  • 創建一個多對多的關係之間的用戶和網友稱其爲經理。在此表中創建所有關係。
    • 優點:只需要一個查詢,用戶可以有多個管理器。
    • 缺點:有人離開時很難改變層次結構。

我接受任何其他建議人,也是如此。

+1

您是否考慮使用Treebeard或MPTT建模您的關係? –

+0

不熟悉他們,我會開始研究。 – mklauber

+0

@Elf:看起來像MPTT是我想要的。如果您想要代表,發佈作爲答案,我會接受它。 – mklauber

回答

1

統一數據樹(其中由節點和葉子引用的數據具有相同類別)通常可以容易地由基於SQL的樹結構維護。雖然你總是可以手寫一個,但Django MPTTTreebeard都處理了這個問題。我用過Treebeard,但MPTT似乎更受歡迎。

+0

我喜歡關於MPTT的一件事是修改父節點不需要定製API調用。這意味着我可以使用管理界面來管理我的層次結構。 – mklauber