1. 程式人生 > >簡單的RBAC用戶角色權限控制

簡單的RBAC用戶角色權限控制

inner ast south 還需 兩張 title mark -o mar

Java web項目中,無論項目是大是小,或多或少都會涉及到用戶訪問權限的控制,權限管理總體的設計思路就是,不該看的不看,不該做的不做!據我目前的了解,我所知道的幾種實現訪問權限控制的方式有:

JQuery的zTree設計權限樹;
權限框架shiro;
基於角色的訪問控制RBAC;

這是我所知道的幾種權限管理,如果有誤或是還有其他的方法,望指正!
而今天我要說的就是基於角色的訪問控制RBAC的權限管理,基於角色的訪問控制(Role-Based Access Control),在RBAC中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。最後的結果就是不同的用戶登錄系統會看到不同的功能,也就是菜單。

首先是數據庫的設計,需要用戶表(user),角色表(role),權限表(permission),還需要兩張中間表,用戶-角色表(user_role),角色-權限表(role_permission),表結構如下:

用戶表(user)

技術分享圖片

用戶-角色表(user_role)

技術分享圖片

角色表(role)

技術分享圖片

權限表(permission)

技術分享圖片

角色-權限表(role_permission)

技術分享圖片

這是基礎5張表的表結構設計,寫一個SQL語句測試一下,代碼如下:

select u.id,u.true_name,r.role_name,p.permission_name,m.menu_name
from user u 
INNER JOIN user_role ur on u.id = ur.user_id
INNER JOIN role r on ur.role_id = r.id
INNER JOIN role_permission rp on r.id = rp.role_id
INNER JOIN permission p on rp.permission = p.id
INNER JOIN permission_menu pm on p.id = pm.permission_id
INNER JOIN menu m on pm.menu_id = m.id
WHERE m.parent_id = 1 

查詢結果:

技術分享圖片

一般來說,簡單的權限管理使用這5張表就可以實現,權限即是菜單。但是在這個例子中我多連接了一個菜單表,為了方便菜單的顯示,方便觀察。

簡單的RBAC用戶角色權限控制