我想爲ACL創建模式;然而,我在執行它的幾種方法之間撕裂。ACL的數據庫模式
我很確定我不想處理級聯權限,因爲這會導致後端和站點管理員很大的混淆。
我想我也可以和用戶一起生活,一次只能在一個角色中工作。像這樣的設置將允許隨着網站的增長而添加角色和權限,而不會影響現有的角色/規則。
起初我要規範化數據,並有三張表來表示關係。
ROLES { id, name }
RESOURCES { id, name }
PERMISSIONS { id, role_id, resource_id }
找出被允許的地方,用戶是否會像這樣的查詢:
SELECT id FROM resources WHERE name = ?
SELECT * FROM permissions WHERE role_id = ? AND resource_id = ? ($user_role_id, $resource->id)
然後我意識到,我只會有大約20個資源,每個多達5個動作(創建,更新,查看等),也許還有8個角色。這意味着我可以公然無視數據規範化,因爲我永遠不會有超過幾百條可能的記錄。
所以也許這樣的模式會更有意義。
ROLES { id, name }
PERMISSIONS { id, role_id, resource_name }
這將讓我查找在單個查詢
SELECT * FROM permissions WHERE role_id = ? AND permission = ? ($user_role_id, 'post.update')
那麼其中哪些是更正確的記錄?是否有ACL的其他架構佈局?
您也可以使用正確,正確的規範化架構在單個查詢中查找權限。使用'JOIN'。 – 2011-05-08 23:15:48
我對級聯權限的直接體驗是,我(軟件開發人員/維護人員)很難獲得正確的權限,但是對於管理員來說,生活更加美好。部分原因是我包含在權限用戶界面中,可以查看您有權執行的操作,以及*爲什麼*您有權執行此操作。所以他們可以很容易地看到許可來自哪裏。這對他們來說非常直觀。 – btilly 2011-05-11 17:58:04