设计与实现简单而经常使用的权限系统(四):无需维护level,递归构建树
第三篇中。我们通过维护节点的深度level,通过迭代全部的节点,仅仅须要一次,就构造了树。
本篇。换一种方式。
优点是:不维护节点的深度level,添加和改动节点时,也不用维护。递归实现,代码比較清晰。
坏处是:节点较多的时候。性能可能不够好。不能直接查询到节点的深度level。
当然。假设须要level字段,在递归过程中,是能够计算得到的。关于在递归过程中,计算level。后面有介绍这样的方法。
关于树的遍历和查找,大家都有基础,上面描写叙述了一些整体思路,代码中有凝视,基本就不用再具体介绍了。
//不维护节点的深度level,通过递归构造树 public static List<Map<String, Object>> buildTree( List<Map<String, Object>> list) { //目标树 List<Map<String, Object>> treeList = new ArrayList<Map<String, Object>>(); //全部的顶级节点 List<Map<String, Object>> rootList = TreeMenuUtil.findTopLevelNodeList(list); //全部的非顶级节点 List<Map<String, Object>> notRootList = TreeMenuUtil.findNotRootList(list); //遍历顶级节点 for (Map<String, Object> root : rootList) { // 构造子结点 buildChildList(root, notRootList); //把根节点放到集合中 treeList.add(root); } return treeList; } // 为一个“root节点,这个地方的root指有孩子的节点” private static void buildChildList(Map<String, Object> rootNode, List<Map<String, Object>> notRootList) { Integer acl = MapUtils.getInteger(rootNode, "acl"); for (Map<String, Object> notRoot : notRootList) { //从非顶级节点中。为当前节点寻找子结点 boolean equals = MapUtils.getInteger(notRoot, "parent_acl").equals(acl); if (equals) { List<Map<String, Object>> list = (List<Map<String, Object>>) rootNode .get("children"); if (list == null) { list = new ArrayList<Map<String, Object>>(); rootNode.put("children", list); } list.add(notRoot); //递归。为当前节点构造子结点 buildChildList(notRoot, notRootList); } } }
原文首发:http://fansunion.cn/article/detail/572.html
版权声明:本文博主原创文章,博客,未经同意不得转载。
设计与实现简单而经常使用的权限系统(四):无需维护level,递归构建树的更多相关文章
- 设计与实现的简单和经常使用的权限系统(五岁以下儿童):不维护节点的深度level,手工计算level,树形结构
以这种方式.和第三的类似介绍.所不同的是.深度未在数据库中存储节点level,添加和更改时间,护.而是,在程序中,实时去计算的. 至于后面的,依照level升序排序,再迭代全部的节点构造树,与第三篇 ...
- 简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树
第三篇中,我们通过维护节点的深度level,通过迭代所有的节点,只需要一次,就构造了树. 本篇,换一种方式. 好处是:不维护节点的深度level,增加和修改节点时,也不用维护.递归实现,代码比较清晰 ...
- 转:RBAC如何设计一个权限系统
前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块 ...
- 大一C语言结课设计之《简单计算器》
/*===============================================*\ ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值 ** 简 ...
- “权限系统_基于HUI”的简单介绍和交流
昂,最近比较闲,写了个权限系统. 后端框架还是老样子,基于本人自己搭建的后台基础开发框架"Spring_Mvc_EF":前端框架,我挑选了一阵子,最后选用了HUI前端开发框架,因为 ...
- 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...
- 软件架构设计学习总结(1):标准Web系统的架构分层
1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层的技术都需要使用.例如:一 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布
之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录:一.通过Dapr实现一个简单的基 ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
随机推荐
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序 总结
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第15章节--开发SP2013工作流应用程序 总结 在SP2013中,工作流已经从SP Server中脱离 ...
- Linux cp -a用法
对于cp -a最主要的用法是在保留原文件属性的前提下复制文件.其实还有个很好的用法,如下: 大家知道linux下复制目录可以通过,cp -r dirname destdir 但是这样复制的目录属性会发 ...
- FBReaderJ源代码编译配置
1.git路径:https://github.com/geometer/FBReaderJ.git 2.project中HowToBuild指引了怎么编译,补充一下: 须要在project文件夹和th ...
- Windows Phone开发(39):漫谈关键帧动画上篇
原文:Windows Phone开发(39):漫谈关键帧动画上篇 尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅 ...
- Android分屏显示LogCat
Eclipse里有非常多界面组件,文件列表.编辑区.类结构等等,在这么多界面组件里,再打开一个Logcat就基本没有什么空间了.与其挤在一起还不如分开成两个窗体. 或者你有两个屏幕,想一个屏幕编辑,一 ...
- WebForm / MVC 源码分析
ASP.NET WebForm / MVC 源码分析 浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm ...
- Codeforces Round#309 C Kyoya and Colored Balls
给定一个k表示颜色的种类从1到k 然后接下来k行, 每行一个数字, 代表该颜色的球有多少个 这些球都放在一个包中,然后依次拿出. 要求颜色i的最后一个球, 必须要排在颜色i+1的最后一个球前面, ...
- hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...
- Quartz.NET学习系列
Quartz.NET它是一个开源的任务调度引擎,对于周期性任务,持久性任务提供了很好的支持,并且支持持久性.集群等功能. 这是什么对我来说Quartz.NET学习记录: 源代码下载http://yun ...
- Routeros 计划任务连线/断线ADSL
老板吩咐,要求晚上11点前断网,目的是让大家伙早睡早起. 不想使用Panabit来做策略,阿童木的D2500C还是性能不足,就用ROS的计划任务. 第1步 校时 时间要准,要不控制个乱七八糟. 操作路 ...