權(quán)限判斷用XML的比較多。不需要分支語句的代碼。直接讀取XML文件,生成相應(yīng)HTML就可以了。也就是你的XML或者數(shù)據(jù)表中有某權(quán)限哪些按鈕可用,哪些不具備,讀取數(shù)據(jù)表數(shù)據(jù)或XML,然后用代碼生成HTML,就是權(quán)限控制的效果了
宣漢網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,宣漢網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為宣漢近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的宣漢做網(wǎng)站的公司定做!
代碼沒有,這個(gè)玩意要有一般也是集成在項(xiàng)目中的,一般不會(huì)發(fā)給你??梢越o你說個(gè)思路:
用戶表t_user (userId,xxxxx)
角色表t_role(roleId,xxxx) ? //一般就是id再加上個(gè)名稱字段,比如管理員,普通用戶
用戶角色表t_role_user(id,userId,userId) ?用戶角色關(guān)聯(lián)表
功能表或者叫資源表 t_function(functionId,url,parentFunctionId,xxx) ?//存放菜單名稱 url地址之類
角色功能表(id,roleId,functionId) ?//角色能有哪些功能
一般的權(quán)限控制,登錄的時(shí)候根據(jù)用戶查詢到該用戶有哪些角色,根據(jù)角色查詢到該角色有哪些功能。把有的功能做成菜單給用戶展示。
首先介紹下思路:
1、用戶表 user;
2、角色表 role;
3、菜單 menu;
4、角色菜單權(quán)限表 role_menu;
5、用戶菜單權(quán)限表 user_menu;
如圖:
根據(jù)用戶角色取出該角色所有權(quán)限,并對(duì)用戶進(jìn)行權(quán)限分配;注意菜單的按鈕(新增、刪除、修改)權(quán)限是放在中間表(user_menu)中的;
1、新增用戶時(shí),是要根據(jù)用戶角色進(jìn)行分配權(quán)限的 一定記得批量添加;批量、批量、批量,重要的事情說三遍,不要查詢角色權(quán)限,然后for循環(huán),這樣效率太低了;
SQL如下:
INSERT INTO sys_user_menu(UserId, MenuId, DelPower,?? ?UpdPower,?? ?InsPower,?? ?ViewPower)
SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}
updPower 默認(rèn)都是有的 所以都是1,這樣根據(jù)角色查詢出權(quán)限直接添加,響應(yīng)時(shí)間大大提升;
2、修改用戶角色也要記得重新分配用戶權(quán)限哦!這個(gè)不能忘,可以用上面的方法;
業(yè)務(wù)方法:
如果角色沒有修改,是不用重新分配權(quán)限的,所有userRole 重置為 null,如果角色修改則刪除原權(quán)限,重新進(jìn)行分配;
3、最后要優(yōu)化的就是根據(jù)用戶查詢權(quán)限的時(shí)候啦,我最開始是這樣做的,查詢角色權(quán)限,用戶權(quán)限,返回到前端,前端進(jìn)行處理;結(jié)果就是很卡 基本上要三到四秒,
解決方案,一步到位;一個(gè)查詢返回全部數(shù)據(jù)。
如下SQL:
SELECT menu.MenuId id, ParentId pid, MenuName text,
(SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND? MenuId = sm.MenuId) isShow,
(SELECT CONCAT(
(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))
FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}
AND? smenu.MenuId = sm.MenuId) MenuInfo
FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId
WHERE RoelId = #{roleId}
首先根據(jù) 角色I(xiàn)D查詢出權(quán)限,然后子查詢用戶是否有該權(quán)限,有返回1 木用返回 0;
最后按鈕權(quán)限 我是直接拼接成字符串,分別對(duì)應(yīng) 添加、刪除、修改、查看 1 有該按鈕 0 沒有該按鈕;
優(yōu)化后 不管是添加、修改用戶,加載用戶權(quán)限都能控制在 1~2 秒;
spring security可以實(shí)現(xiàn)。。不過spring要升級(jí)到3.0
tomcat6。7都能用,我有婉轉(zhuǎn)班。。置于前臺(tái)菜單用js隱藏也可以,用security判斷角色都行,
如果按資源判斷就要做acl。。這個(gè)很簡(jiǎn)單。。不過一般初學(xué)者要學(xué)會(huì)spring security至少要1,2個(gè)星期吧,如果樓主需要我可以把文檔發(fā)給你,如果你直接要代碼我也可以給你,但你看不懂。。建議還是看文檔先把,你留個(gè)郵箱給我我發(fā)給你。。