权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个问题,并给出4种方法的整体思路,后续再分别详细介绍这4种方法,再往后介绍完整的权限系统的设计与实现. 权限表的结构: acl.parent_acl, 最重要的就是这2个字段,有了这2个字段,就可以构造一棵树了. 前端需要的json格式: "data":[{ "acl":…
权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介绍下这个问题,并给出4种方法的总体思路.兴许再分别具体介绍这4种方法,再往后介绍完整的权限系统的设计与实现. 权限表的结构: acl.parent_acl, 最重要的就是这2个字段.有了这2个字段,就能够构造一棵树了. 前端须要的json格式: "data":[{ "acl&qu…
概述 权限系统需要和别的系统集成,因此,良好的API是易用性的保证. 这里只设计一些权限相关的核心 API,关于用户,组织,导入导出之类的后续再逐步补充 API 设计 围绕权限有以下 4 类 API: 授权 单独授权 给某个 用户/组织 授予权限,权限 = 资源+动作 UpdatePermission(userID, resourceID, action) error // 授权后 userID 可以在 resouceID 上进行 action UpdatePermission(orgID, r…
一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的招徕.保留旧客户.提供客户服务及进一步提升企业和客户的关系,并运用市场营销工具,提供创新式的个人化的客户商谈和服务,辅以相应的信息系统或信息技术如数据挖掘和数据库营销来协调所有公司与顾客间在销售.营销以及服务上的交互. 此系统主要是以教育行业为背景,为公司开发的一套客户关系管理系统.…
虚拟机是每一个程序猿必备的工具.本文依据最新版VirtualBox用户手冊的提示,通过自己的亲自实践,给出了Win7系统与执行在当中的VirtualBox 5.0.2中的Ubuntu 14.04共享信息的三种方法,而不仅仅是建立二者的共享目录. 在学习新的技术时.或者做不同的測试时,为了节省硬件的目的,我们经常安装虚拟机,并在当中安装不同的操作系统.我们把执行在硬件的本来的那个操作系统称为主操作系统 (host OS),而把执行在虚拟机上面的操作系统称为客操作系统 (guest OS). 这时,…
第三篇中,我们通过维护节点的深度level,通过迭代所有的节点,只需要一次,就构造了树.  本篇,换一种方式. 好处是:不维护节点的深度level,增加和修改节点时,也不用维护.递归实现,代码比较清晰.  坏处是:节点较多的时候,性能可能不够好.不能直接查询到节点的深度level.当然,如果需要level字段,在递归过程中,是可以计算得到的.关于在递归过程中,计算level,后面有介绍这种方法. 关于树的遍历和查找,大家都有基础,上面描述了一些总体思路,代码中有注释,基本就不用再详细介绍了. /…
如果在节点的属性中,增加一个level属性,即树的深度,构造树会非常容易.前提是,增加和修改节点的时候,要维护level. 根节点的level为1,下一级为2,以此类推. 构造树的方法,主要有2个: // 按照level排序,根节点在上,子结点在下 public static List<Map<String, Object>> buildTree(List<TreeNode> list) { List<Map<String, Object>> r…
 本篇介绍的方法,参考了网上的代码.在递归过程中,计算level,是受到了这种方法的启发. CSDN上有篇关于树的算法,目标是把一个无序的树,变成有序的. 我看了下代码,并运行了下,感觉是可行的. 我在想,既然可以把一棵树完整的遍历下来,那么应该可以知道每个节点的深度level.尝试了下,证明可行. 但是,我最终对比本篇的方法,和第5篇中的方法,基本一致.不同的地方是,这篇保存了遍历的顺序,实现了把无序的树变成有序的. 之所以第5篇和第6篇,分成2篇,是因为我自己原创的和借鉴别人的,还是分开比较…
 这种方式,与第三篇中介绍的类似.不同的是,数据库中不存储节点的深度level,增加和修改时,也不用维护.而是,在程序中,实时去计算的. 至于后面的,按照level升序排序,再迭代所有的节点构造树,与第三篇中的方法,完全一样.因此,本篇和下一篇,只介绍如何计算level,不再介绍后面的具体实现了. 计算level,采用递归方式. // 计算所有节点的level public static List<Map<String, Object>> caculateLevel( List&l…
为了增强linux系统的安全性,我们需要在用户输入空闲一段时间后自动断开,这个操作可以由设置TMOUT值来实现.将以下字段加入到/etc/profile 中即可(对所有用户生效). export TMOUT=900    # 设置900秒内用户无操作就字段断开终端 readonly TMOUT     # 将值设置为readonly 防止用户更改 注意:设置了readonly 之后在当前shell下是无法取消的,需要先将/etc/profile 中设置readonly行注释起来或直接删除,log…