最近有一个后台项目前端改造,需要将以前的前端框架换成layui,所以在设计权限与菜单这块研究了一些时间,记录一下以便探讨,查网上很多资料,也有一些心得。

先说说思路:首先菜单权限设计,我是设计到了按钮权限。开始就得先设计好自己的数据库,网上有很多参考,我的设计是如下


-- ----------------------------
-- ebiz_admin菜单表
-- ----------------------------
DROP TABLE IF EXISTS `ebiz_admin_menu`;
CREATE TABLE `ebiz_admin_menu` (
  `MENU_ID` int(11) NOT NULL AUTO_INCREMENT,
  `MENU_NO` varchar(20) COLLATE utf8_bin NOT NULL,
  `RESOURCE_ID` int(11) DEFAULT NULL COMMENT '资源Id',
  `MENU_ICON` int(11) DEFAULT NULL COMMENT '菜单图标',
  `MENU_STATUS` int(11) DEFAULT NULL COMMENT '菜单状态',
  `DISPLAY_NAME` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '显示名称',
  `PARENT_MENU_NO` varchar(20) COLLATE utf8_bin DEFAULT 0 COMMENT '父节点,默认为0,方便递归',
  `VIEW_SEQ` int(11) DEFAULT NULL COMMENT '菜单排列序列号',
  `CREATED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '创建用户',
  `CREATED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `MODIFIED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '修改用户',
  `MODIFIED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',
  `IS_DELETE` char(1) COLLATE utf8_bin DEFAULT '0' COMMENT '删除标志 0未删除 1删除 0默认值',
  `MENU_PATHS` varchar(2000) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`MENU_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=217 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='菜单样式表';


-- ----------------------------
-- 角色表
-- ----------------------------
DROP TABLE IF EXISTS `ebiz_admin_role`;
CREATE TABLE `ebiz_admin_role` (
  `ROLE_ID` int(11) NOT NULL AUTO_INCREMENT,
  `ROLE_CODE` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '角色编码',
  `ROLE_NAME` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '角色名称',
  `CREATED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '创建用户',
  `CREATED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `MODIFIED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '修改用户',
  `MODIFIED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `IS_DELETE` char(1) COLLATE utf8_bin DEFAULT '0' COMMENT '删除标志 1 删除 0未删除 默认未0',
  PRIMARY KEY (`ROLE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色表';


-- ----------------------------
-- 角色按钮权限
-- ----------------------------
DROP TABLE IF EXISTS `ebiz_admin_role_button`;
CREATE TABLE `ebiz_admin_role_button` (
  `ROLE_ID` int(11) NOT NULL COMMENT '角色Id',
  `BUTTON_ID` int(11) DEFAULT NULL COMMENT '按钮流水号',
  `CREATED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `CREATED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `MODIFIED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `MODIFIED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色权限关联表';


-- ----------------------------
-- 角色菜单权限
-- ----------------------------
DROP TABLE IF EXISTS `ebiz_admin_role_menu`;
CREATE TABLE `ebiz_admin_role_menu` (
  `ROLE_ID` int(11) NOT NULL COMMENT '角色Id',
  `MENU_ID` int(11) DEFAULT NULL COMMENT '菜单流水号',
  `CREATED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `CREATED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `MODIFIED_USER` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `MODIFIED_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色权限关联表';

以上是我的菜单权限设计方案

权限设计好了开始根据登录用户查询菜单列表,这里有很多方式,有的人用递归查询,有的人用mysql自定义函数查询所有子节点然后去根据用户权限匹配。

我们只要知道layui导航栏需要的是一个什么数据,layui官方文档提供了这个数据格式:

官方声明需要严格按照他们提供的数据格式进行返回

例如我们建一个返回数据实体类:

/*** Created with Intellij IDEA.* Author: Smiley* Date: 2020/8/20 9:42* Description:用户导航菜单实体*/
public class UserMenuDTO {private Integer id;//idprivate String title;//菜单名称private String icon;//图标private String link;//链接地址private Boolean status;//状态private List<?> titleNode;//子节点//省略get/set
}

然后你查询出来的数据放在上面实体类的list中,注意上面的子节点也是UserMenuDTO的list集合

response.getWriter().print(jsonResponse);//用这个返回前端即可啦。

所以我们做动态左侧导航的时候,需要返回前端这种格式的json数据

有了数据以后,前端页面整一个ajax获取到这数据遍历一下即可。以下js仅供参考

<script>//注意:导航 依赖 element 模块,否则无法进行功能性操作layui.use('element', function(){var $ = layui.jquery,element = layui.element;//获取所有的菜单$.ajax({url:"${ctx}/user/getMenu",type:"POST",dataType:"json",success:function (res) {var html='';html+='<ul class="layui-nav layui-nav-tree"  lay-filter="test">';$.each(res,function (i,item) {html=html+'<li class="layui-nav-item">';html += '<a href="javascript:;" data-url="'+item.link+'" nav-id="'+item.id+'">' +'<cite>'+item.title+'</cite></a>';if(item.titleNode!=""&& item.titleNode.length>0){html += '<dl class="layui-nav-child">';$.each(item.titleNode,function (j,item2) {html+='<dd>'html += '<a href="javascript:;" data-url="'+item2.link+'" ' +'nav-id="'+item2.id+'">' +'<cite>'+item2.title+'</cite></a>';if(item2.titleNode!=""&&item2.titleNode.length>0){html += '<ol class="layui-nav-child">';$.each(item2.titleNode,function (k,item3) {html += '<li>'+'<a href="javascript:;" data-url="'+item3.link+'" nav-id="'+item3.id+'">'+'<cite>'+item3.title+'</cite>'+'</a>'+'</li>';});html+= '</ol>';}});html+= '</dl>' ;}html+= '</li>';});html+='</ul>';$(".layui-side-scroll").append(html);element.init();}});});
</script>

到这里layui左侧导航动态权限的思路基本就是这样了,如果你有更好的方法欢迎分享交流

layui使用之左侧导航动态生成与权限控制相关推荐

  1. Django 权限管理-后台根据用户权限动态生成菜单

    Django权限管理 实现目标: 1.管理用户,添加角色,用户关联角色 2.添加权限.角色关联权限 3.添加动作.权限关联动作 4.添加菜单.权限关联菜单 实现动态生成用户权限菜单(可设置多级菜单嵌套 ...

  2. layui图片上传按钮按着没反应_关于layui动态生成文件上传按钮后点击无效的解决办法...

    首先,这是一个坑,大坑,网上一大堆写的云里雾里,不知所以,转了一圈,除了copy就是copy,Jesus God,花了一晚上,走通了这个坑,话不多说,直接解决 layui版本: layui-v2.5. ...

  3. MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航

    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航 原文:MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航 上篇文章我们完成了 动态生成多级菜单 这个实用组件. 本篇 ...

  4. layui模块显示收缩_修改layui的后台模板的左侧导航栏可以伸缩的方法

    原生的左侧导航栏代码: 所有商品 列表一 列表二 列表三 超链接 解决方案 列表一 列表二 超链接 云市场 发布商品 自己修改的: 生源追踪 生源列表 学校信息 工做计划 学员管理 学员列表 考勤管理 ...

  5. layui动态生成多页签

    layout.html <!DOCTYPE html> <html> <head><meta charset="utf-8">< ...

  6. layui laydate 渲染失效问题,lay-key导致动态生成代码二次渲染失败

    在开发中因为需要动态生成时间选择框,所以选择了layui的 laydate控件,但是遇到了生成的时间选择框点击无效的问题,然后再次render 时间选择器一闪就消失了,查了多方资料,找到了如下的解决方 ...

  7. Word在生成PDF后,PDF左侧导航书签不显示目录的解决方法

    Word在生成PDF后,PDF左侧导航书签不显示目录的解决方法 第一步 第二步 第一步 另存为PDF格式,操作如下: 第二步 选择"创建标签时使用标题"

  8. Vue + ElementUI 动态生成面包屑导航教程

    在Web应用程序中,面包屑导航是一种常用的导航方式,它可以帮助用户更好地理解当前页面的位置和层次关系.在Vue项目中,结合ElementUI组件库,我们可以很容易地实现一个动态生成面包屑导航的功能.本 ...

  9. axure 生成html 左侧导航列表不在了,axure导航栏菜单 axure预览左侧导航框架调出来...

    axure 怎样增加导航条子菜单 axure做出类似百度经验页面的左侧步骤栏的效果,步骤: 制作页面 为了体现效果,需要做一个比较长(高)的页面,在Axure工作区中拖入4个矩形,分别为顶部标题.菜单 ...

  10. layui -- autoForm 模块(动态生成表单,非官网模块)

    动态生成form表单的需求可用, formTemplate.html 和 autuform.js 在同级目录 ,使用方式如下 创建 autoform文件夹 formTemplate.html 和 au ...

最新文章

  1. iOS如何在iTunes网站查看并下载APP的dsym文件
  2. html文件url_for加载静态文件
  3. stk 坐标系_STK中文用户手册.pdf
  4. 谷歌又放大招:视觉效果完胜其他SOTA的风格迁移网络,手机端可达实时4K
  5. 【Linux】一步一步学Linux——export命令(211)
  6. 12.13记录//QQDemo示例程序源代码
  7. 2017百度之星初赛:A-1005. 今夕何夕
  8. 复旦大学高等数学学习网站
  9. html语言弹出窗口代码,网页弹出窗口代码
  10. ① 数据库介绍 及 关系型数据库的关系代数表达式
  11. android模拟奥克斯空调红外,奥克斯空调手机遥控器
  12. [GXYCTF 2019]Ping Ping Ping
  13. 海思对接索尼ECX334 RGB OLED屏总结
  14. Html和Markdown中的空格, nbsp; ensp; emsp; 以及 thinsp; zwnj; zwj;三种Unicode空格
  15. 古罗马数字的基本知识
  16. java基础数据类型与String类型区别
  17. 净利环比缩水过半,Salesforce龙头地位不保?
  18. 将sd卡格式化为ext4格式并挂载
  19. 记录单极性归零码控制LED,GD32F330+SPI+DMA方式
  20. 广东2007新登记软件产品清单(转载)

热门文章

  1. 《销售就是要会聊天》宋犀堃 epub+mobi+azw3
  2. 运维数据该如何防泄露
  3. 手握5家大厂offer!字节大牛教你手撕Android学习,面试真题解析
  4. 敏捷无敌之成长的烦恼(15)
  5. SaaS,会成为科大讯飞的新增长极吗?
  6. 如何用API下载从哥白尼气候数据中心ECWMF下载数据
  7. 尿路感染治疗行业调研报告 - 市场现状分析与发展前景预测
  8. 量化炒股---长期实盘交易(12.8万如何变100万)
  9. Fortran代码自动创建文件夹升级版说明
  10. mysql semaphore waits_MySQL内核月报 2014.08-MySQL· 捉虫动态·long semaphore waits-阿里云开发者社区...