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

news2024/10/17 17:20:55

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();
    @Override
    public 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, deleted
        from 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();
    @Override
    public 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,pid
        from 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()方法返回父ID

                String 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自然语言处理之pyltp模块介绍、安装与常见操作案例

pyltp是哈尔滨工业大学社会计算与信息检索研究中心推出的一款基于Python封装的自然语言处理工具&#xff0c;它提供了哈工大LTP&#xff08;Language Technology Platform&#xff09;工具包的接口。LTP工具包以其强大的中文分词、词性标注、命名实体识别、依存句法分析等功能&…

Idea不能创建java8切换路径

顶部的Server URL改成https://start.aliyun.com/

Ubuntu配置应用开机自启动

有些自己下载的应用想要配置开机自启动&#xff0c;比如snipaste&#xff0c;steam等&#xff0c;可以通过一下步骤进行配置 点击应用展开图标 这个里面就是开机自启动的一些应用&#xff0c;可以将自己想要自启动的应用添加到这个里面来 以上是snipaste配置&#xff0c;起…

大数据治理:构建数据驱动的智能决策体系

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

RocketMq详解:三、RocketMq通用生产和消费方法改造

文章目录 1.背景2.通用方法改造2.1添加maven依赖2.2 RocketMq基础配置2.3 配置类2.5 消息传输的对象和结果2.4 消息生产者2.5 消息消费者2.6 功能测试 1.背景 在第二章&#xff1a;《RocketMq详解&#xff1a;二、SpringBoot集成RocketMq》中我们已经实现了消费基本生产和消费…

CISCN2022-cactus

这周在疯狂学kernel pwn。 记录一下这题&#xff0c;race conditonmsg_msgpipe_buffer&#xff0c;kaslrsmepsmapkpti。 漏洞很简单&#xff0c;所有操作都没加锁&#xff0c;就是race condition了。edit什么的都只能2次。 很明显了&#xff0c;一次泄露基址&#xff0c;一次劫…

unidbg console debugger 调试技巧

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 打开debug日志 编辑 unidbg-android/src/test/resources/log4j.properties 把 log4j.logger.com.github.unidbg.AbstractEmulator 改为 DEBUG 当运行报错时…

lenovo联想 ThinkPad E14 Gen 2,E15 Gen 2 AMD(20T6,20T7,20T8,20T9)原厂Win10系统镜像下载

适用机型&#xff1a;【20T6、20T7、20T8、20T9】 链接&#xff1a;https://pan.baidu.com/s/1AVTvmiIHjafsFw8P7_jMPg?pwdzux5 提取码&#xff1a;zux5 联想原装WIN系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑…

C#实现CRC32算法

CRC32 是一种校验和算法&#xff0c;用于检测消息是否未被修改。 它被广泛使用&#xff1a;例如&#xff0c;计算以太网发送包校验和。 public class CRC32 {private static readonly uint[] Crc32Table new uint[256];static CRC32(){uint i, j;uint crc;for (i 0; i < …

《深度学习》OpenCV 风格迁移、DNN模块 案例解析及实现

目录 一、风格迁移 1、什么是风格迁移 2、步骤 1&#xff09;训练 2&#xff09;迁移 二、DNN模块 1、什么是DNN模块 2、DNN模块特点 1&#xff09;轻量 2&#xff09;外部依赖性低 3&#xff09;方便 4&#xff09;集成 5&#xff09;通用性 3、流程图 4、图像…

软件设计之Redis(1)

软件设计之Redis(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷Redis零基础到进阶&#xff0c;最强redis7教程&#xff0c;阳哥亲自带练&#xff08;附redis面试题&#xff09; 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Redi…

Unity3D 观察者模式

Unity3D 泛型事件系统 观察者模式 观察者模式是一种行为设计模式&#xff0c;通过订阅机制&#xff0c;可以让对象触发事件时&#xff0c;通知多个其他对象。 在游戏逻辑中&#xff0c;UI 界面通常会监听一些事件&#xff0c;当数据层发生变化时&#xff0c;通过触发事件&am…

【JavaSE基础】Java 变量

为什么需要变量 变量是程序的基本组成单位 class Test{public static void main(String[] args){int a 1; //定义一个变量&#xff0c;类型为int&#xff0c;变量名为a&#xff0c;并赋值为1int b 3; //定义另一个变量&#xff0c;类型为int&#xff0c;变量名为b&#xff0…

sqli-labs less-25 and/or绕过

来到less-25 我们可以看到下面有提示&#xff0c;Hint: Your Input is Filtered with following result: 说明本关卡有过滤&#xff0c; 构造 http://192.168.140.130/sq/Less-25/?id1’ 页面报错&#xff0c;从报错可以得知闭合方式为,所以 用注释符&#xff0c;发现注释符…

oracle数据坏块处理(一)-通过rman备份修复

表有坏块时&#xff0c;全表查询会报错&#xff1a; 这时候如果有前面正常的rman备份&#xff0c;那么我们就可以通过rman备份直接对数据文件块做恢复 先对数据文件做个逻辑检查&#xff1a; RMAN> backup check logical VALIDATE DATAFILE EXB_DATA/exb/datafile/cuteinf…

公开课 | 2024最新清华大模型公开课 第3课 神经网络与大模型基础 Part 2

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结&#xff0c;2小时视频&#xff0c;5分钟阅读&#xff0c;加速内容学习与传播。 大纲 神经网络概述 神经网络的概念 神经网络的应用方式 序列建模与神经网络架构 循环神经网络&#xff08;RNN&#xff09;…

UE5模型导入面板解读

1.Skeletal Mesh&#xff1a; 是一个可以让模型动起来的选项&#xff0c;适用于需要动画的角色或生物。是否勾选&#xff1a;如果导入的是一个需要动画的角色或生物&#xff0c;就勾选 Skeletal Mesh 选项&#xff1b;如果是静态物体&#xff0c;就不勾选。 2.Build Nanite&a…

集合类HashMap,HashTable,ConcurrentHashMap区别?

1.HashMap 简单来说&#xff0c;HashMap由数组链表组成的&#xff0c;数组是HashMap的主体&#xff0c;链表则是主要为了解决哈希冲突而存在的&#xff0c;如果定位到的数组位置不含链表&#xff08;当前entry的next指向null&#xff09;,那么对于查找&#xff0c;添加等操作很…

VS中创建QT项目。

一&#xff0c;安装QT&#xff0c; 重点&#xff1a;在安装QT的时候要安装msvc201x版本的组件&#xff0c; 二 &#xff0c; 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三。安装 win10sdk&#xff0c;这是因为我的当前电脑是win10的&#xff0c; 安装版…

【逗号绕过】

简介 所以为了避免逗号被过滤&#xff0c;我们来看看如何绕过叭 一、From for 绕过 我们直接看一个题目&#xff1a; id1 页面输出hello user id1 and 11%23 页面返回hello user id1 and 11%23 页面不返回数据符合盲注&#xff0c;并且是一个数字型的sql注入&#xff0c;尝…