运用ralasafe中遇到的问题
编程技术  /  houtizong 发布于 3年前   229
前言:以下都是我自己的看法,如果有什么不足之处,请各位大侠指点。
最近一个星期都在把ralasafe整合到项目里面,ralasafe是一个很好的中间件,把我们需要的权限都处理了,方便了
我们对权限的管理。但我在从ralasafe里读取权限树的时候,遇到了一个很奇怪的问题。我是这样设计的,在我的应用系
统中有ID为1的用户A1;在ralasafe中建立了一个R1的角色;并且建了p1、p2、p3三个权限,p2、p3是p1的子节点;
现在我把A1用户设置为R1角色,把权限p1、p2、p3授予R1角色。我在代码中如下调用ralasafe的权限树
Privilege privilege = WebRalasafe.getBusinessPrivilegeTree(req);for ( Object ob : privilege.getChildren()) {Privilege pr = (Privilege)ob;System.out.println(pr.getName());}
但是上述的打印代码中,有时候能够打印有时候不能打印,我就很奇怪。于是我就下载了最新的源码,进行调试,当我
跟踪到UserRoleManagerImpl.java的public Privilege getBusinessPrivilegeTree(Object userId)这个方法的一
句代码Collection allBussinessPrivileges = pvlgMng.getAllBusinessPrivileges();时就查看里面的内容有个Id为0
pid为-2的privilege对象,这个对象在PrivilegeManagerImpl.java里的这段代码设置的
private synchronized void buildBusinessPrivilegeTree() {if (!businessPrivilegeTreeChanged)return;businessPrivilegeTree = new Privilege();businessPrivilegeTree.setId(Privilege.BUSINESS_PRIVILEGE_TREE_ROOT_ID);businessPrivilegeTree.setType(Privilege.BUSINESS_PRIVILEGE);businessPrivilegeTree.setIsLeaf(false);businessPrivilegeTree.setPid(Privilege.NULL_ROOT_ID);businessPrivilegeTree.setParent(null);allBusinessPrivilegesMap = new HashMap();Collection privileges = getAllBusinessPrivilegesFromDb();privileges.add(businessPrivilegeTree);buildTree(privileges, allBusinessPrivilegesMap);businessPrivilegeTreeChanged = false;}
当我继续往下执行的时候,我发现在public Privilege getBusinessPrivilegeTree(Object userId)这个方法的下面,
又new出来了一个root的Privilege对象,这个root对象的id也为0,pid也为-2,也把它add到allBussinessPrivileges
中,这样导致了这个集合中有两个内容相同的对象,以至于下面返回的root对象的children有时候为空,有时候不为空。
以上是小弟的说法,还请汪老大,出来帮帮指点指点.....
也相信ralasafe以后会越来越完善,中国的开源就靠大家了.....
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接