我們正在構建一個管理實習的應用程序(例如「實習醫師二級醫師」)。該應用程序正在Symfony2中構建。 我們有可以有一個或多個角色的用戶(例如教練也可以是主管)。在下面的例子中使用 角色是:我們應該使用選民還是ACL?兩者的優點和缺點是什麼?任何陷阱?
- 學生(明顯)
- 管理員(管理實習)
- 主管(公司中的學生的導師)
- 教練(教練一組學生在某個實習中)
角色不限於上面提到的那些。
什麼樣的權限中的一些例子,我們有:
- 有時它是一樣簡單:與角色「管理員」的所有用戶都可以訪問某個頁面。但在99%的情況下,它並不像這樣簡單。
- 所有用戶都可以查看詞彙表項目,但只能查看以某種方式鏈接到用戶鏈接到的教師的項目。例如,一個學生與一個與某個教師相關的實習相關聯。主管以同樣的方式與實習相關聯。具有「管理員」角色的用戶只是某個教職員工的教員協調員。因此,有一大堆規則決定用戶是否與一個或多個院系相關聯。
- 學生可以爲他/她所關聯的實習提供他的偏好,但只有在該實習有特定日期的情況下以及在該實習的某些指定日期之間給予優先。
- 主管可以向學生髮送郵件,但只有分配給他/她的學生。
- 教練可以看到學生的詳細信息,但只有他/她執教的學生。管理員有權將學生分配給教練。
- ...
正如你所看到的許可制度不僅限於具有特定角色的用戶,並具有一定權限的實體的作用。有時它會更復雜一些,權限僅限於一部分數據。 注意,我們每年將有大約5000名學生和4000名主管使用該應用程序。學生數據庫每年將增加1000+。
我的問題:我們應該使用選民,ACL,兩者的組合,......?有什麼優點和缺點?有沒有什麼陷阱?
歡迎任何建議!
也沒有,因爲2。6,選民已經變得更容易實施:http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters –