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_namefrom user u INNER JOIN user_role ur on u.id = ur.user_idINNER JOIN role r on ur.role_id = r.idINNER JOIN role_permission rp on r.id = rp.role_idINNER JOIN permission p on rp.permission = p.idINNER JOIN permission_menu pm on p.id = pm.permission_idINNER JOIN menu m on pm.menu_id = m.idWHERE m.parent_id = 1
查詢結果:
一般來說,簡單的權限管理使用這5張表就可以實現,權限即是菜單。但是在這個例子中我多連接了一個菜單表,為了方便菜單的顯示,方便觀察。