2013-10-01 20 views
0

美好的一天。MySQL:從RBAC數據庫中檢索所有權限的最有效方法是什麼?

我有一個基於角色的訪問控制數據庫,並尋找一種有效的方式來獲取用戶擁有的所有權限。這是圖表:

RBAC database design

現在我需要得到所有用戶的最(可能)有效的方式許可。試過這個查詢:

SELECT p.name 
    FROM permission p 
    WHERE p.id = (
    SELECT rpl.permission_id 
    FROM role_permission_list rpl 
    WHERE rpl.role_id = (
     SELECT url.role_id 
     FROM user_role_list url 
     WHERE url.user_id = 2 
    ) 
) 

但是這個失敗。由於子查詢返回多於1個結果。試圖想到一個加入 - 無法弄清楚。

在此先感謝。

PS:未來會有一個permission_overrides表,因爲一個獨立的訪問控制實體可能擁有專屬權限集。

回答

1

這將是簡單的3加入,如:

SELECT 
    `user`.id, 
    permission.* 
FROM 
    `user` 
    LEFT JOIN user_role_list ON `user`.id=user_role_list.user_id 
    LEFT JOIN role_permission_list ON user_role_list.role_id=role_permission_list.role_id 
    LEFT JOIN permission ON role_permission_list.permission_id=permission.id 
WHERE 
    `user`.id=$user_id 

(因爲你不是在尋找角色的描述從特定的權限來了,我不包括該表來查詢)

+0

謝謝!這工作!標記爲已接受的格式和說明! –

1

這給一試:

SELECT u.id, p.name 
FROM `user` u 
LEFT JOIN user_role_list url ON u.id = url.user_id 
LEFT JOIN role r ON r.ID = url.role_id 
LEFT JOIN role_permission_list rpl ON rpl.role_id = r.id 
LEFT JOIN permission p ON p.ID = rpl.permission_id 
WHERE u.id = A_Users_ID 
+0

謝謝!這工作! –

相關問題