2012-10-22 45 views
8

我正在使用Symfony2,並且我的用戶和角色已經存儲在我的數據庫中。如果我在security.yml設置類似下面它的偉大工程:如何在數據庫中存儲Symfony2「access_control」信息?

access_control: 
    - { path: ^/admin, role: ROLE_ADMIN} 
    - { path: ^/users, role: ROLE_MANAGER} 

但我想在數據庫中存儲此ACCESS_CONTROL信息,所以從我的系統,用戶可以通過管理界面更改權限本身。

我看着ACL和FOSUserBundle但無法找到一個解決方案。我發現我可以使用類似if ($user->hasRole($role))的東西來檢查權限,但我需要在每個控制器中執行此操作。

有沒有一種方法來定義一個動態的「ACCESS_CONTROL」功能?也許像將access_control重定向到可能返回true或false的某個類。 任何解決方案?

回答

5

,最好的辦法是設置您在你的行動/你想驗證你的數據庫存儲角色服務設置一個特定的角色(例如,DB_ROLE_CHECK)。

那麼你會創建一個掛接到DB_ROLE_CHECK和驗證您對您的數據庫條目請求安全選民。

參見:

+0

謝謝,它工作完美! –

+0

我沒有明白。我需要在角色層次結構中放置角色DB_ROLE_CHECK以及如何在Voter中檢查路由?例如,我有數據庫條目,如[路線,角色]。並在access_control規則^ /:DB_ROLE_CHECK,對不對?所以它會在每個請求上執行DBVoter。在$屬性中,我將有角色,然後是$ token。那麼我將有一個路線或路徑作爲$主題參數呢?所以我需要通過路徑獲取數據庫記錄,並在decisionManager中使用$ token中的$ user角色,對吧? –

3

訪問地圖內置here

如果沒有發現ACCESS_CONTROL,什麼也不做。

現在,定義自己的執行AccessMapInterface的,並覆蓋有類參數security.access_map.class

你可能會需要一個工廠建立你AccessMap。

+1

我想要做到這一點,但請,我如何重寫security.access_map.class參數?我試着把它放在security.yml中:security:access_map:class:CRM \ CoreBundle \ Security \ DBAccessMap –

相關問題