通常我们后台有很多不同的角色登录,每个角色不同的权限,这个在 SpringBoot整合Shiro实现权限控制,根据不同的角色登录显示不同的菜单。

比如我目前只有两个角色,系统管理员和普通用户。

关于菜单绑定角色,其实也可以菜单绑定权限的。这里为了方便,我们使用使用角色来区分。

SpringBoot不同角色显示不同的菜单

一、数据库设计和数据
1、menu 菜单表

SpringBoot不同角色显示不同的菜单

2、role 表

SpringBoot不同角色显示不同的菜单

3、role_menu 表

SpringBoot不同角色显示不同的菜单

二、核心代码
1、实体

package com.liuyanzhao.blog.api.model;
import lombok.Data;
import java.util.List;
/*** 菜单** @author liuyanzhao*/
@Data
public class Menu {/*** 菜单ID*/private Integer id;/*** 父级菜单ID*/private Integer pid;/*** 菜单名称*/private String name;/*** 菜单类型:top_menu, main_menu, admin_menu*/private String type;/*** 菜单URL*/private String url;/*** 菜单图标*/private String icon;/*** 菜单分数,越大排序越前*/private Integer score;/*** 子菜单Menu列表*/private List<Menu > childMenu;
}

2、Controller 层

@GetMapping("/admin/menu/listAdminMenu")
@ResponseBody
public ResultVO listAdminMenu() {List<Menu> result;//1、判断当前用户的角色Subject subject = SecurityUtils.getSubject();if(subject.hasRole("ROLE_ADMIN")) {//管理员result = menuService.listAdminMenuByRole(1);} else {//普通用户result = menuService.listAdminMenuByRole(2);}if(result == null || result.size() == 0) {return new ResultVO().error("菜单为空");}return new ResultVO().ok(result);
}

3、Service 层

@Override@Cacheable(value = "menu", key = "'listAdminMenuByRole'+#p0")public List<Menu> listAdminMenuByRole(Integer roleId) {List<Menu> menuList;List<Menu> newMenuList = new ArrayList<>();try {//1、根据角色获得所有的菜单(包括一级和二级)menuList = menuMapper.listMenuByRoleId(roleId);for (int i = 0; i < menuList.size(); i++) {Menu menu = menuList.get(i);List<Menu> childMenuList = new ArrayList<>();//2、拼装二级菜单if (menu.getPid() == 0) {for (int j = 0; j < menuList.size(); j++) {if (Objects.equals(menu.getId(), menuList.get(j).getPid())) {childMenuList.add(menuList.get(j));}}menu.setChildMenu(childMenuList);newMenuList.add(menu);}}} catch (Exception e) {log.error("【后台菜单获取失败】,cause:{}", e);}return newMenuList;}

4、Dao 层

MenuMapper.java
List<Menu> listMenuByRoleId(Integer roleId);MenuMapper.xml
<!--从 role_menu 关联表查询-->
<select id="listMenuByRoleId" parameterType="java.lang.Integer"
resultMap="BaseResultMap">select menu.* from role_menu, menuwhere role_menu.role_id = #{value} and role_menu.menu_id = menu.id
</select>

SpringBoot不同角色显示不同的菜单相关推荐

  1. Asp.net MVC3.0 基于不同的角色显示不同的菜单

    前面提到过用Asp.net MVC3.0正在做一个问答系统性质的论坛.前期把菜单全部显示以方便测试模块功能.现在正在完善,加上角色模块,然后不同的角色登陆系统会看到不同的菜单栏,还有就是游客(未登录用 ...

  2. wordpress不同角色显示不同的菜单栏

    如果使用熟悉,wordpress的菜单栏设计在开发中是一个很方便的工具.这篇文详细讲wordpress中如何对不同角色显示不同的菜单栏. 1.注册不同的菜单,在functions.php中注册菜单 / ...

  3. vue + router 权限管理 不同角色显示不同路由

    思路: login页面登录时 加上角色的标记,存储到本地缓存(localstorage) 路由js文件,meta属性加个是否可见(visiable true或false) home 基本导航栏页面逻辑 ...

  4. Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.角色.权限分配 1.用户信息表与行数据获取 2.角色分配 3.权限分配 二.菜单分配 下一步 前言 有感于公司旁边的兰州 ...

  5. 右边菜单_Excel – 如何始终显示下拉菜单右边的小箭头?

    制作下拉菜单,不是什么高深的技巧,我在各种案例中也经常会用到. 如果要学习多级联动菜单的制作,可参见 Excel indirect 函数(2) – 制作多级联动菜单(文末彩蛋) 最近有同学提出了一个关 ...

  6. php 显示下拉菜单,PHP在下拉列表中显示菜单树

    菜单树的功能: function category_tree($parent_id) { $sql = "SELECT * FROM menu WHERE parent_id ='" ...

  7. springboot+mybatis日志显示SQL

    在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...

  8. html分级显示的下拉列表,javascript实现在下拉列表中显示多级树形菜单的方法

    本文实例讲述了javascript实现在下拉列表中显示多级树形菜单的方法.分享给大家供大家参考.具体如下: 这里演示在下拉列表框中显示分级的菜单,在很多网站都可以看到的效果,很实用,下拉列表框中的选项 ...

  9. 【微信开发第一章】SpringBoot实现微信公众号创建菜单,同步菜单功能

    前言 在进行微信公众号业务开发的时候,微信公众号的自定义菜单是非常重要的一环,该篇文章会先使用微信测试工具过一遍流程,再使用代码进行实现,争取看过的小伙伴都能够实现,创建公众号菜单和代码同步公众号菜单 ...

最新文章

  1. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
  2. Java中windows路径转换成linux路径等工具类
  3. Tomcat源码分析--转
  4. Android Makefile编译流程
  5. boost::signals2::shared_connection_block相关的测试程序
  6. spring boot 会默认加载DataSourceAutoConfiguration这个类
  7. ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
  8. angularjs启动项目报ERROR in AppModule is not an NgModule解决方法
  9. 2016软考网络规划设计师论文写作
  10. 使用react-native做一个简单的应用-03欢迎界面
  11. java中aliases的意思,Java Charset.aliases方法代码示例
  12. pdf安装 adobe acrobat reader DC
  13. 被玩坏的“网抑云音乐“可视化数据分析
  14. 在VMware上安装Ubuntu详细教程
  15. NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式
  16. 论文阅读——Shadow Attacks:Hiding and Replacing Content in Signed PDFS
  17. r语言导入ggplot2_R语言绘图之ggplot2包
  18. Photoshop Elements 10 All-in-One For Dummies 免积分下载
  19. 微信公众号申请+新浪SAE申请
  20. Kotlin入门:var和val的区别

热门文章

  1. android 中Service跳转到Activity
  2. Http协议网络对时工具
  3. SpringBoot+Vue+ElementUI实现的JAVA快速开发平台
  4. encodeURI和decodeURI
  5. 开源软件与自由软件的区别——个人体会
  6. vue+websocket+Stomp组件实现前端长连接
  7. 基于c语言的上课点名系统,课堂点名系统的设计与实现
  8. PB加密,PBD加密,杜绝PB程序反编译,PB加密工具
  9. adobe证书。安装的时候有公司 作者提示
  10. php与管理信息系统的开发,php工资和管理信息系统的开发与设计