java实现角色权限的菜单树结构

Java小技能:多级菜单排序并返回树结构 框架: SpringBoot+MybatisPlus 对数据表中的菜单进行排序并返回树形Json格式的菜单列表。实现思路:先获取全部菜单,然后再对菜单进行装配,生成树形结构。先获取一级菜单,再递归获取子节点。需求: 服务商角色配置权限管理。 阅读详情

通过迭代器和递归实现查询用户角色的权限树

业务层

/**
     * @author 
     * @date 2020-07-09 15:36:12
     * @description 根据id查找用户权限信息
     */
    @Override
    public SysUserDTO getUserMenuDetail(String id) {
        SysUserDTO sysUserDTO = sysUserMapper.getUserMenuDetail(id);
        List<SysRoleDTO> roleList = sysUserDTO.getRoleList();
        if (CollectionUtils.isNotEmpty(roleList)) {
            for (SysRoleDTO sysRoleDTO : roleList) {
                List<SysMenuDTO> sysMenuDTOList = sysRoleDTO.getSysMenuDTOList();
                List<SysMenuDTO> menuTreeList = this.getMenuList(sysMenuDTOList);
                sysRoleDTO.setSysMenuDTOList(menuTreeList);
            }
        }
        return sysUserDTO;
    }

    /**
     * @author 
     * @date 2020-07-09 17:12:37
     * @description 将菜单数据格式转化为树形结构
    */
    public List<SysMenuDTO> getMenuList(List<SysMenuDTO> sysMenuDTOList) {
        List<SysMenuDTO> parentMenuList = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(sysMenuDTOList)) {
            for (SysMenuDTO sysMenuDTO : sysMenuDTOList) {
                String parentId = sysMenuDTO.getParentId();
                if (StringUtils.isBlank(parentId)) {
                    parentMenuList.add(sysMenuDTO);
                }
            }
        }
        for (SysMenuDTO sysMenuDTO : parentMenuList) {
            //递归调用
            sysMenuDTO.setChildMenuList(getChild(sysMenuDTO.getId(), sysMenuDTOList));
        }
        return parentMenuList;
    }

    /**
     * @author 
     * @date 2020-07-09 17:13:06
     * @description 递归调用, 获取子菜单
    */
    private List<SysMenuDTO> getChild(String pid, List<SysMenuDTO> sysMenuDTOList) {
        List<SysMenuDTO> childMenuList = new ArrayList<>();
        for (SysMenuDTO sysMenuDTO : sysMenuDTOList) {
            String parentId = sysMenuDTO.getParentId();
            if (StringUtils.isNotEmpty(parentId) && StringUtils.isNotEmpty(pid) && parentId.equals(pid)) {
                childMenuList.add(sysMenuDTO);
            }
        }
        //把子菜单的子菜单再循环一遍
            for (SysMenuDTO sysMenuDTO : childMenuList) {
                sysMenuDTO.setChildMenuList(getChild(sysMenuDTO.getId(), sysMenuDTOList));
            }
        // 递归退出条件
        if (childMenuList.size() == 0) {
            return null;
        }
        return childMenuList;
    }

sql

    <select id="getUserMenuDetail" resultMap="userRoleMenuMap">
        select su.id_int,
        su.id as user_id,su.company_id,su.login_name,su.password,su.zh_name,su.telephone,su.id_no,su.email,su.wechat_qr,su.head_photo,su.sex,
        sr.id as role_id,sr.role_name,
        sm.id as menu_id,sm.menu_name,sm.parent_id,sm.menu_url,sm.icon,sm.menu_type,sm.perms
        from sys_user su
        left join sys_users_roles sur on sur.user_id = su.id
        left join sys_role sr on sr.id = sur.role_id
        left join sys_menus_roles smr on smr.role_id = sr.id
        left join sys_menu sm on sm.id = smr.menu_id
        where su.id = #{id}
    </select>

手动映射

<resultMap id="userRoleMenuMap" type="com.etouch.pojo.dto.basic.SysUserDTO">
        <id column="id_int" property="idInt"/>
        <result column="user_id" property="id"/>
        <result column="company_id" property="companyId"/>
        <result column="login_name" property="loginName"/>
        <result column="password" property="password"/>
        <result column="zh_name" property="zhName"/>
        <result column="telephone" property="telephone"/>
        <result column="email" property="email"/>
        <result column="wechat_qr" property="wechatQr"/>
        <result column="head_photo" property="headPhoto"/>
        <result column="sex" property="sex"/>
        <collection property="roleList" ofType="com.etouch.pojo.dto.basic.SysRoleDTO">
            <id column="role_id" property="id"/>
            <result column="role_name" property="roleName"/>
            <collection property="sysMenuDTOList" ofType="com.etouch.pojo.dto.basic.SysMenuDTO">
                <id column="menu_id" property="id"/>
                <result column="menu_name" property="menuName"/>
                <result column="menu_url" property="menuUrl"/>
                <result column="parent_id" property="parentId"/>
                <result column="icon" property="icon"/>
                <result column="menu_type" property="menuType"/>
                <result column="perms" property="perms"/>
            </collection>
        </collection>
    </resultMap>
JAVA用户、角色、权限、菜单、工作流管理系统 epoch-erp是基于jfinal的系统,本来想集成后续开发erp相关功能的,但是因为UI的问题,项目处于搁浅中。目前系统已经基本集成的功能包含有,用户管理,角色管理,菜单管理,组织管理,数据字典,日志管理,接口管理(暂时未完成实际应用),流程配置,运行流程管理,消息管理(暂无实际应用),业务模块没有做。后台是基于Jfinal+shiro+缓存框架EhCache或者Redis,数据库使用了durid流和mysql数据库。模板使用了Jfinal自带的模板开发功能。前台框架使用了topjui技术,具体可百度查官网。工作流已经集成进去了activity5,包含代码功能等已经正常集成可用。配置好环境,启用可以tomcat来正常启用,报错无误后即可打开界面。 立即下载

相关推荐

如何实现java递归 处理权限管理菜单树或分类

主要介绍了如何实现java递归 处理权限管理菜单树或分类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

帮我写一段角色菜单权限管理的Java代码

好的,我来帮你写一段关于角色菜单权限管理的 Java 代码。首先,我们需要定义一个类来表示角色,这个类应该包含角色的名称、描述以及它拥有的菜单权限的列表。 public class Role { private String name; private String description; private List<String> menuPermissions; ...

weixin_35755640的博客 289

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6216

MyBatis Plus 拦截器实现数据权限控制(完整版)

新增针对不需要做数据权限控制的注解

progammer10086的博客 8103

事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域?

事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~

Cyril的博客 5万+

STM32F4系列HAL库配置定时器实验——输入捕获

STM32F4系列HAL库配置定时器实验——输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器

azs0504的博客 9285

java 递归实现权限树(菜单树)

java权限树,树状菜单

来自外太空的鱼-张小张 1825

STM32 移植FreeModbus详细过程

modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。 这里详细说下如何将freemodbus移植到stm32平台。我之前下载的版本是1.6,我会在我的下载链接里面加上1.6的freemodbus压缩包以及我已经移植好的stm32 for freemodbus版本。我上传的移植好的绝对没问题,经过多个板子测试。这里编译器使用的是keil5.28,单片机用的是STM32F103RCT6。 移植到VET6以及ZET6的话只需要改一下选择的芯片就好,改法:

qq_40305944的博客 8万+

Java中用户、角色、权限的关系详解

用户、角色、权限 权限赋予角色,角色又赋予用户。 角色相当于身份。 表结构设计 角色与权限关联,用户通过扮演相应的角色,能够得到相应的权限。 用户管理 用户基本信息维护 查询用户 增加用户 删除用户(记得把用户角色表,以用户为主,把用户对应的角色也删除掉) 角色分配 点击添加角色数据会回显 更新角色需要判断: 添加新的角色记录 已有的角色不添加,添加没有的角色记录 清空所有的角色记录 删除用户绑定的用户信息 移除部分角色信息 删除不存在的记录信息,存在的记录保存 移除部分

qq_41346335的博客 3486

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5422

Python爬虫实战:基于最新技术栈的政府招标采购数据抓取与分析

对于企业、研究人员和数据分析师来说,能够高效地获取这些数据意味着可以获得宝贵的商业洞察和市场先机。随着反爬技术的不断升级和网站结构的日益复杂,传统的爬虫方法已经难以满足需求。我们将采用Selenium、Playwright等现代浏览器自动化工具,结合Scrapy框架和异步请求库,构建一个能够应对各种反爬措施的强大爬虫系统。Playwright是微软开发的浏览器自动化工具,支持Chromium、WebKit和Firefox,比Selenium更快速、更稳定。

2201_76125261的博客 1310

若依前后端分离版4、获取动态菜单路由

若依前后端分离版4、获取动态菜单路由

qq_45974926的博客 5262

基于Python的船舶AIS数据爬取与分析:从数据采集到可视化实战

本文详细介绍了如何使用Python构建一个完整的船舶AIS数据爬取与分析系统。文章从AIS系统的基本原理讲起,逐步深入到数据采集、存储、清洗、分析和可视化的全流程。我们将使用最新的Python技术栈,包括aiohttp异步爬虫、MongoDB存储、Pandas数据处理以及Pydeck三维可视化等。本文提供了完整的代码实现,并探讨了在实际应用中可能遇到的问题及其解决方案。关键词:AIS数据、Python爬虫、异步IO、数据可视化、海事分析。

2201_76125261的博客 811

Java实现查询菜单返回树结构

1.在DAO中的实现代码: public List<TreeResult> parseMenuTree(List<TreeResult> list){ List<TreeResult> result = new ArrayList<>(); //1.获取第一个节点 for (TreeResult menu:list) { if(null == menu.getParentId()){

iamlzyoco的博客 2444

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3746

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计

项目正式进入第二阶段。

Evan 的博客 6万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用easyui的tree组件实现给角色快捷分配权限功能

使用easyui的tree组件实现给角色快捷分配权限功能

沐雨橙风ιε的博客 1542

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot-Security-用户权限分配-查找用户的菜单权限 ...

本章实现的功能是,某个用户登录时,如何查找该用户的菜单权限 Spring security认证过程 1、用户使用用户名和密码进行登录。2、Spring Security将获取到的用户名和密码封装成一个实现了Authentication接口的UsernamePasswordAuthenticationToken。3、将上述产生的token对象传递给Auth...

测试0901-1 3878

java树形结构显示权限_SpringMVC+ZTree实现树形菜单权限配置

计划在开源项目里加入权限配置的功能,打算加入zTree实现树形结构。zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。角色信息实体类:package org.muses.jeeplatform.core.entity.admin;import javax.persistence.*;import java.io.Seri...

weixin_39797693的博客 454

智能体测试完整指南:从翻车到可控的5个关键动作

演示台上它表现惊艳,一上线就开始犯浑:同一个任务,有时成功有时失败——这正是智能体评测要补的课。开源项目 awesome-ai-agents 收录了当前自主智能体的全景清单,从编程到客服一应俱全,这篇文章教你给自己的智能体搭一套测试体系。 ## 🔍 先搞清一件事——智能体测试和软件测试到底差在哪 你测的不是固定代码路径,而是一个每次都在做概率性选择的"决策者"。差异在三点:**决策路径不可预

gitblog_00567的博客 372

【Saas-export项目】13--(Ztree菜单与ajax)基于RBAC权限模型--给角色分配权限–用户操作界面

文章目录Ztree介绍(1)什么是Ztree?(2)Ztree在哪里使用到?(3)Ztree有什么特点?(4)Ztree如何使用?给角色分配权限–用户操作界面(1)用户不会写sql,如何给角色分配权限(2)业务流程 Ztree介绍 (1)什么是Ztree? zTree 是一个依靠jQuery实现的多功能 “树插件”。 在使用的时候,先导入jquery才能导入zTree (2)Ztree在哪里使用到? 树状菜单 树状数据的Web显示 权限管理等等 (3)Ztree有什么特点? 优异的性能、灵活的配置

巴黎不快乐的博客 246

项目一 4 角色管理 模块管理 ztree树 对角色分配权限

# 回顾 - PageHelper 分页插件 ​ 1.引入坐标 ​ 2.在mybatis和sprig整合的时候配置方言 ​ 3.在service中使用PageHelper( 设置分页参数,查询全部,构造PageInfo的返回值 ) - 部门管理 1.子部门和父部门的一对一 - RBAC权限模型 用户,角色,模块(权限菜单) 用户和角色多对多(中间表),角色和模块的多对...

AdamCafe的博客 1948

Java 生成权限树结构菜单实例含选中状态

实体类 import lombok.Data; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author: nql * @Description:实例类 * @date: */ @Data public class AdminPermissionV...

leoningCool的博客 692

SpringBoot + Vue3:实现树形权限菜单

SpringBoot实现从数据库查询到树形数据转换的核心逻辑,并通过接口返回树形数据,前端使用Vue3和Ant Design动态渲染树形组件,实现权限菜单的展示与操作。

Cherish_01的博客 1411

递归获取菜单、权限

/// <summary> /// 递归获取用户菜单 /// </summary> /// <param name="list"></param> /// <param name="pid"></param> /// <returns></returns> private List<MenusInfo> .

爱是永恒2020的博客 507

yudao-cloud菜单权限:动态菜单加载与按钮级别权限控制

在现代企业级应用开发中,权限管理是保障系统安全的核心环节。你是否曾遇到过这样的困扰: - 不同角色的用户登录后看到完全相同的菜单,缺乏个性化体验 - 按钮级别的权限控制需要在前端硬编码,维护成本高 - 权限变更需要重新部署前端代码,灵活性差 - 多租户环境下权限隔离复杂,容易产生安全漏洞 yudao-cloud基于Spring Cloud Alibaba构建的RBAC(Role-Based A...

gitblog_00851的博客 945
上一篇: Linux启动tomcat报错 Cannot find /usr/tomcat/apache-tomcat-8.5.39/bin/setclasspath.sh
下一篇: lambda表达式的使用总结
意田天
博客等级 码龄7年 41粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意田天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值