1. 程式人生 > >使用layui+ajax實現簡單的選單許可權管理及排序

使用layui+ajax實現簡單的選單許可權管理及排序

**簡單的例子使用的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'>"+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+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;**