使用layui+ajax實現簡單的選單許可權管理及排序
阿新 • • 發佈:2019-02-01
**簡單的例子使用的layui框架,並沒有使用他的ztree外掛,只用ajax配合sql完成最簡單的一二級選單許可權控制及其排序功能。
先看資料庫設計:**
user表:
role表:
;
menu表:
user_role表:
role_menu表:
在這裡 menu的id依然是主鍵,多了mid也就是選單id,pare_menu_id也就是這個選單對應的父級選單的選單id(mid);沒有的話,就是0,也就是一級選單,在這裡,一級選單的mid必須滿足為整千數,或者萬也行,其子選單在mid+999範圍內;
sql查詢結果:
前臺資料處理方法:
//選單迴圈遍歷列印拼接操作
$(function () {
$.ajax( {
url : projectName+'/sys/menu/findMenuByRole',
type : 'post',
dataType : 'json',
success : function(data) {
var menu = ""; //定義變數儲存
for(var i = 0;i<data.length;i++){
menu += "<li class='layui-nav-item '>"
if(data[i].pareMenuId == 0){ //取出父元素的選單,拼進頁面
menu += "<a href='javascript:;'>"+data[i].menuName+"</a>"
for(var j = 0;j<data.length;j++){ //繼續遍歷這幾條資料
if(data[j].mid > data[i].mid && data[j].mid < (data[i].mid)+1000 ){ //取出這個父元素所對應的子元素
menu += "<dl class='layui-nav-child'>"
menu += "<dd>"
menu += "<a href='"+data[j].menuPath+"' target='option'>"+' '+data[j].menuName+"</a>"
menu += "</dd>"
menu += "</dl>"
}
}
}
menu += "</li>";
}
$("#nav").html(menu);
var element = layui.element;
element.init()//初始化element事件,使選單展開
}
});
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
效果如下:
圖1是預設排序
下面我們將使用者管理放在第一位。看圖
將order設定為一結果如圖:
這樣使用者管理就去了第一位;
sql實現:
SELECT
t1.*
FROM
(
SELECT
sys_menu.id,
sys_menu.mid,
sys_menu.menu_name,
sys_menu.menu_path,
sys_menu.pare_menu_id,
sys_menu.`status`,
sys_menu.`order`,
abc.`status` AS status2
FROM
sys_menu
INNER JOIN (
SELECT
*
FROM
role_menu
WHERE
id IN (
SELECT
min(id)
FROM
role_menu
GROUP BY
role_id,
menu_id
)
AND role_menu.`status` = 1
) abc ON abc.menu_id = sys_menu.id
INNER JOIN sys_role ON sys_role.id = abc.role_id
INNER JOIN user_role ON user_role.role_id = sys_role.id
INNER JOIN sys_user ON sys_user.id = user_role.user_id
WHERE
sys_user.id = #{id}
AND sys_menu.`status` = 1
ORDER BY
mid
) t1
ORDER BY
t1.pare_menu_id,
t1.`order`;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
**上圖#{id}就是使用者的id,多表關聯查詢就可以了;(因為用的是sm框架單純的springMvc+mybatis+html)
關於許可權,當然不同使用者看到的東西不同;至於選單的許可權,我是在role_menu表中加了status,預設都是0;admin使用者的都是1;因為如果是角色的選單授權很麻煩;乾脆都給他賦予許可權,之不過狀態這裡給她控制一下就可以了,也就是新增一個選單,就給這個表每個角色新增一條數除admin其餘為status=0;**