Java web項(xiàng)目中,無論項(xiàng)目是大是小,或多或少都會(huì)涉及到用戶訪問權(quán)限的控制,權(quán)限管理總體的設(shè)計(jì)思路就是,不該看的不看,不該做的不做!據(jù)我目前的了解,我所知道的幾種實(shí)現(xiàn)訪問權(quán)限控制的方式有:
JQuery的zTree設(shè)計(jì)權(quán)限樹;
權(quán)限框架shiro;
基于角色的訪問控制RBAC;
這是我所知道的幾種權(quán)限管理,如果有誤或是還有其他的方法,望指正!
而今天我要說的就是基于角色的訪問控制RBAC的權(quán)限管理,基于角色的訪問控制(Role-Based Access Control),在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶通過成為適當(dāng)角色的成員而得到這些角色的權(quán)限。最后的結(jié)果就是不同的用戶登錄系統(tǒng)會(huì)看到不同的功能,也就是菜單。
首先是數(shù)據(jù)庫(kù)的設(shè)計(jì),需要用戶表(user),角色表(role),權(quán)限表(permission),還需要兩張中間表,用戶-角色表(user_role),角色-權(quán)限表(role_permission),表結(jié)構(gòu)如下:
用戶表(user)
用戶-角色表(user_role)
角色表(role)
權(quán)限表(permission)
角色-權(quán)限表(role_permission)
這是基礎(chǔ)5張表的表結(jié)構(gòu)設(shè)計(jì),寫一個(gè)SQL語句測(cè)試一下,代碼如下:
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
查詢結(jié)果:
一般來說,簡(jiǎn)單的權(quán)限管理使用這5張表就可以實(shí)現(xiàn),權(quán)限即是菜單。但是在這個(gè)例子中我多連接了一個(gè)菜單表,為了方便菜單的顯示,方便觀察。
聯(lián)系客服