当前位置: 首页 > news >正文

今日指数项目day8实战权限管理器(上)

3.权限管理器

3.1 权限列表展示功能

1)原型效果

在这里插入图片描述

2)接口说明
功能描述: 查询所有权限集合
服务路径: /api/permissions
服务方法:Get
请求参数:无

响应数据格式:

{"code": 1,"data": [{"id": 1236916745927790556,"code": "btn-user-delete","title": "删除用户权限","icon": "","perms": "sys:user:delete","url": "/api/user","method": "DELETE","name": "","pid": 1236916745927790575,"orderNum": 100,"type": 3,"status": 1,"createTime": "2020-01-08T07:42:50.000+00:00","updateTime": null,"deleted": 1},{"id": 1473855535827783680,"code": "","title": "测试-01","icon": "el-icon-user-solid","perms": "","url": null,"method": "","name": "test-01","pid": 0,"orderNum": 555,"type": 1,"status": 1,"createTime": "2021-12-23T03:18:36.000+00:00","updateTime": "2021-12-23T03:18:36.000+00:00","deleted": 1}//...............]
}

代码实现

1. 表现层
    @ApiOperation(value = "权限列表展示功能")@GetMapping("/permissions")public R<ArrayList<SysPermission>> getPermissions(){return service.getPermissions();}
2. 服务层
R<ArrayList<SysPermission>> getPermissions();
    @Overridepublic R<ArrayList<SysPermission>> getPermissions() {ArrayList<SysPermission> permisson_data = sysPermissionMapper.getPermissions();return R.ok(permisson_data);}
3. Dao层

ArrayList permisson_data = sysPermissionMapper.getPermissions();

ArrayList<SysPermission> getPermissions();
    <select id="getPermissions" resultType="com.jixu.stock.pojo.entity.SysPermission">select id, code, title, icon, perms, url, method, name, pid, order_num, type, status, create_time, update_time, deletedfrom sys_permission;</select>

3.3 添加权限时回显权限树

1)原型效果

在这里插入图片描述

2)接口说明
功能描述: 添加权限时回显权限树,仅仅显示目录和菜单
服务路径: /api/permissions/tree
服务方法:Get
请求参数:无

响应数据格式:

保证数据顺序;

{"code": 1,"data": [{"id": "0","title": "顶级菜单","level": 0},{"id": "1236916745927790564","title": "组织管理","level": 1},{"id": "1236916745927790560","title": "菜单权限管理","level": 2},{"id": "1236916745927790575","title": "用户管理","level": 2},{"id": "1236916745927790578","title": "角色管理","level": 2},{"id": "1236916745927790569","title": "系统管理","level": 1},{"id": "1236916745927790558","title": "接口管理","level": 2},{"id": "1236916745927790571","title": "SQL监控","level": 2},{"id": "1236916745927790589","title": "日志管理","level": 2},{"id": "1247842736313339904","title": "测试菜单","level": 1},{"id": "1247871697634332672","title": "测试子菜单","level": 2},{"id": "1247877926632951808","title": "测试子菜单1","level": 2},{"id": "1247880664557162496","title": "测试菜单2","level": 1},{"id": "1247881176622960640","title": "测试子菜单2","level": 2},{"id": "1247881904334704640","title": "测试子菜单3","level": 2},{"id": "1469201551976435712","title": "任务管理","level": 1},{"id": "1473855535827783680","title": "测试-01","level": 1}]
}

代码实现

1. 表现层
    @ApiOperation(value = "添加权限时回显权限树")@GetMapping("/permissions/tree")public R<ArrayList<HashMap>> getPermissionsTree(){return service.getPermissionsTree();}
2. 服务层
R<ArrayList<HashMap>> getPermissionsTree();
    @Overridepublic R<ArrayList<HashMap>> getPermissionsTree() {// 获取全部数据ArrayList<PermissonTreeDomian> permisson_data = sysPermissionMapper.getPermissionTree();// 组装数据进行递归HashMap<Long, PermissonTreeDomian> data = new HashMap<>();for (PermissonTreeDomian permissonDatum : permisson_data) {Long id = permissonDatum.getId();HashMap<Long, PermissonTreeDomian> map = new HashMap<>();map.put(id , permissonDatum);data.put(id ,permissonDatum);}// 进行递归ArrayList<HashMap> treeList = new ArrayList<>();HashMap<String, Object> map = new HashMap<>();map.put("id",0);map.put("title","顶级菜单");map.put("level",0);treeList.add(map);TreeUtil.buildPermissionTree(data, Long.valueOf(0),1,treeList);return R.ok(treeList);}
3. Dao层

// 获取全部数据
ArrayList permisson_data = sysPermissionMapper.getPermissionTree();

ArrayList<PermissonTreeDomian> getPermissionTree();
    <select id="getPermissionTree" resultType="com.jixu.stock.pojo.domain.PermissonTreeDomian">select id,title,pidfrom sys_permission;</select>
4. 工具类
public static List<HashMap> buildPermissionTree(Map<Long, PermissonTreeDomian> permissionMap, Long parentId , Integer count,List<HashMap> treeList) {// 创建列表用于保存数据// 循环查询是否有符合条件的数据for (Map.Entry<Long, PermissonTreeDomian> entry : permissionMap.entrySet()) {PermissonTreeDomian permissionDomain = entry.getValue();// 如何Id== pid 则获取到了if (parentId.equals(permissionDomain.getPid())) { // 假设PermissonTreeDomian类中有一个getPid()方法返回父IDString title = permissionDomain.getTitle();Long id = permissionDomain.getId();HashMap<String, Object> map = new HashMap<>();map.put("id" , id);map.put("title" , title);map.put("count" , count);treeList.add(map);buildPermissionTree(permissionMap, permissionDomain.getId(),count+1,treeList);}}return treeList;}
5. 实体类
@Data
public class PermissonTreeDomian {private Long id;private Long pid;private String title;
}

相关文章:

今日指数项目day8实战权限管理器(上)

3.权限管理器 3.1 权限列表展示功能 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a; 查询所有权限集合 服务路径&#xff1a; /api/permissions 服务方法&#xff1a;Get 请求参数&#xff1a;无响应数据格式: {"code": 1,"data":…...

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展&#xff0c;人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一&#xff0c;机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台&#xff0c;帮助学生掌握机器学习…...

linux中软连接和硬链接的区别

定义与概念 硬链接&#xff08;Hard Link&#xff09;&#xff1a;硬链接是文件系统中的一个概念&#xff0c;它直接指向文件系统中的物理数据块。可以把硬链接看作是原始文件的一个别名&#xff0c;它们共享相同的inode&#xff08;索引节点&#xff09;编号。在Linux文件系统…...

#Swift 对比 Static 在Swift 和 OC中的用法

在 Objective-C 和 Swift 中&#xff0c;static 关键字都用于定义类型级别的成员&#xff0c;但它们的用法和行为在两个语言中有所不同。让我们来详细对比一下 Objective-C 和 Swift 中 static 的使用方式和特性。 1. Objective-C 中的 static 在 Objective-C 中&#xff0c;…...

yakit使用教程(三,端口探测和指纹扫描)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 前文链接&#xff1a;yakit下载安装教程。 1.端口扫描的作用。 对目标端口进行扫描可以知道目标服务器开启了什么服务&#xff0c;以便于针对其所存在的服务展开…...

一维数组的引用

#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然&#xff0c;可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值&#xff1a;",i1); scanf_s(&…...

Vue3 watch 监视属性

作用&#xff1a;监视数据的变化&#xff08;和Vue2中的watch作用一致&#xff09;特点&#xff1a;Vue3中的watch只能监视以下四种数据&#xff1a; ref定义的数据。reactive定义的数据。函数返回一个值&#xff08;getter函数&#xff09;。一个包含上述内容的数组。 我们在V…...

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…...

pnpm 和 npm

pnpm 和 npm 是 JavaScript 生态系统中常用的包管理工具&#xff0c;它们各自有不同的特性和优缺点。下面是这两者的详细比较&#xff1a; 1. 基本概念 npm (Node Package Manager)&#xff1a; 是 Node.js 的默认包管理器&#xff0c;提供安装、更新、卸载 JavaScript 包的功…...

笔试算法总结

文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为&#xff0c;通过判断相邻2个字符是否相同&#xff0c;如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…...

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…...

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …...

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径&#xff0c;横向的管理路线和纵向的技术路线。管理路线对应的是管理岗&#xff0c;讲究的是排兵布阵&#xff0c;通过各种资源的优化配置发挥价值。技术路…...

xargs的参数及常用命令

1. xargs 命令简介 xargs 是一个非常有用的工具&#xff0c;它用于从标准输入&#xff08;stdin&#xff09;构建和执行命令行。xargs 可以将标准输入中以空格或换行符分隔的数据&#xff0c;转化为命令的参数传递给其他命令。 使用场景&#xff1a; 当某些命令不支持使用管…...

FLASK 数据库建立以及部署和表的创建

首先安装flask-sqlalchemy db SQLAlchemy(app) 一 Mmeber、User模型类的创建 # coding: utf-8 from app import db, appclass Member(db.Model):__tablename__ memberid db.Column(db.Integer, primary_keyTrue)membername db.Column(db.String(100), uniqueTrue, index…...

微信小程序的面试题

简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 区别 &#xff1f; wx.navigateTo() : 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 wx.redirectTo() : 关闭当前页面&#xff0c;跳转到应用内的…...

udp c语言实现组播的例子

一、组播与广播的区别 1、组播地址和广播地址是不同的概念 组播地址&#xff1a;用于将数据包发送到一组特定的接收者&#xff0c;只有加入该组播地址的设备才能接收数据。它提高了网络效率&#xff0c;因为发送者只需发送一份数据。 广播地址&#xff1a;用于将数据包发送到…...

ffmpeg面向对象——AVInputFormat与URLProtocol啥关系

《ffmpeg面向对象-rtsp拉流相关对象》和《ffmpeg面向对象——拉流协议匹配机制探索》探索过了输入格式匹配和底层协议匹配&#xff0c;且ffmpeg拉流是先是匹配输入格式——抽象为AVInputFormat类&#xff0c;然后再匹配url协议类——抽象为URLProtocol类。 它们是啥关系&#…...

【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解

高阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;二叉搜索树 大家好&#xff0c;这里是店小二&#xff01;今天我们将深入探讨高阶数据结构中的AVL树。AVL树是一种自平衡的二叉搜索树&#xff0c;可以看作是对传统二叉搜索树的优化版本。如果你对数据结…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...