AuthOperater 负责检查权限
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5. package cn.com.do1.component.systemmgr.auth;
  6. import cn.com.do1.common.util.string.StringUtil;
  7. import cn.com.do1.component.systemmgr.auth.AuthQuickDac;
  8. import cn.com.do1.component.systemmgr.auth.UserAuth;
  9. import cn.com.do1.component.systemmgr.util.CollectionUtils;
  10. import cn.com.do1.component.systemmgr.util.SystemRoleCacheMgr;
  11. import cn.com.do1.component.systemmgr.util.Constants.ACCESS_LEVEL;
  12. import cn.com.do1.dqdp.core.DqdpAppContext;
  13. import java.util.ArrayList;
  14. import java.util.Collections;
  15. import java.util.Iterator;
  16. import java.util.List;
  17. import java.util.Map;
  18. import org.springframework.security.core.GrantedAuthority;
  19. import org.springframework.security.core.userdetails.UserDetails;
  20. public class AuthOperater {
  21. public AuthOperater() {
  22. }
  23. //查询 权限code的级别
  24. public static int ckCurrentUserPerAccessLevel(String permissionCode) throws Exception {
  25. if(permissionCode == null) {
  26. throw new Exception("权限代码不能为空!");
  27. } else if(UserAuth.isSuperUser()) {
  28. return ACCESS_LEVEL.ALL.value();
  29. } else {
  30. String[] roleIds = UserAuth.getSessionPerson().getRoleIds().split(",");
  31. ArrayList accessLevList = new ArrayList();
  32. String[] var6 = roleIds;
  33. int var5 = roleIds.length;
  34. for(int var4 = 0; var4 < var5; ++var4) {
  35. String roleid = var6[var4];
  36. List perlist = SystemRoleCacheMgr.getOPermissByRoleId(roleid);
  37. Iterator var9 = perlist.iterator();
  38. while(var9.hasNext()) {
  39. Map per = (Map)var9.next();
  40. if(per.get("PERMISSION_CODE").toString().equalsIgnoreCase(permissionCode)) {
  41. accessLevList.add(Integer.valueOf(per.get("ACCESS_LEVEL").toString()));
  42. }
  43. }
  44. }
  45. if(accessLevList.size() <= 0) {
  46. return ACCESS_LEVEL.NOT_HAS.value();
  47. } else {
  48. return ((Integer)Collections.min(accessLevList)).intValue();
  49. }
  50. }
  51. }
  52. //检查当前用户是否包含权限code
  53. public static boolean ckCurrentUserHasPer(String permissionCode) throws Exception {
  54. if(permissionCode == null) {
  55. return false;
  56. } else if(UserAuth.isSuperUser()) {
  57. return true;
  58. } else {
  59. UserDetails userDetails = DqdpAppContext.getCurrentUser();
  60. Iterator var3 = userDetails.getAuthorities().iterator();
  61. while(var3.hasNext()) {
  62. GrantedAuthority grantedAuthority = (GrantedAuthority)var3.next();
  63. try {
  64. if("all".equals(permissionCode) || StringUtil.isInContainer(permissionCode.split(","), grantedAuthority.getAuthority())) {
  65. return true;
  66. }
  67. } catch (Exception var4) {
  68. return false;
  69. }
  70. }
  71. return false;
  72. }
  73. }
  74. //检查用户针对改权限拥有的级别所有的部门id
  75. public static String ckUserModuelPreDepts(String permissionCode) throws Exception {
  76. int accessCode = ckCurrentUserPerAccessLevel(permissionCode);
  77. if(accessCode != ACCESS_LEVEL.NOT_HAS.value() && accessCode != ACCESS_LEVEL.USER.value()) {
  78. if(accessCode != ACCESS_LEVEL.ALL.value() && accessCode != ACCESS_LEVEL.SYSTEM_USER.value()) {
  79. ArrayList deptList = null;
  80. if(accessCode == ACCESS_LEVEL.DEPT.value()) {
  81. deptList = (ArrayList)AuthQuickDac.getContext().searchUserDeptLevelOrg(UserAuth.getSessionUser().getId().toLowerCase());
  82. }
  83. if(accessCode == ACCESS_LEVEL.DEPT_AND_CHILDREN.value()) {
  84. deptList = (ArrayList)AuthQuickDac.getContext().searchUserDChildLevOrg(UserAuth.getSessionUser().getId().toLowerCase());
  85. }
  86. deptList = (ArrayList)CollectionUtils.replaceList(deptList);
  87. return CollectionUtils.listToString(deptList);
  88. } else {
  89. return "all";
  90. }
  91. } else {
  92. return null;
  93. }
  94. }
  95. }
AuthQuickDac 负责查询权限粒度

  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5. package cn.com.do1.component.systemmgr.auth;
  6. import cn.com.do1.common.dac.QuickDAC;
  7. import cn.com.do1.component.systemmgr.org.model.TbDqdpOrgPO;
  8. import cn.com.do1.component.systemmgr.user.model.TbUserRoleDeptRefPO;
  9. import cn.com.do1.component.systemmgr.util.CollectionUtils;
  10. import cn.com.do1.component.systemmgr.util.SystemCacheUtils;
  11. import cn.com.do1.dqdp.core.DqdpAppContext;
  12. import java.sql.SQLException;
  13. import java.util.ArrayList;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import java.util.Map;
  17. import java.util.concurrent.TimeUnit;
  18. import java.util.concurrent.locks.ReentrantLock;
  19. import javax.sql.DataSource;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. public class AuthQuickDac {
  23. private static final Logger logger = LoggerFactory.getLogger(AuthQuickDac.class);
  24. private static ReentrantLock lock = new ReentrantLock(true);
  25. private static ThreadLocal<Integer> executeCount = new ThreadLocal();
  26. private static AuthQuickDac authQuickDac;
  27. private DataSource ds;
  28. private AuthQuickDac() {
  29. executeCount.set(Integer.valueOf(5));
  30. this.ds = (DataSource)DqdpAppContext.getSpringContext().getBean("dataSource");
  31. }
  32. public static AuthQuickDac getContext() {
  33. try {
  34. lock.lock();
  35. if(authQuickDac == null) {
  36. authQuickDac = new AuthQuickDac();
  37. }
  38. } finally {
  39. lock.unlock();
  40. }
  41. return authQuickDac;
  42. }
  43. private boolean getLook() {
  44. try {
  45. if(lock.tryLock(30L, TimeUnit.MILLISECONDS)) {
  46. executeCount.set(Integer.valueOf(0));
  47. logger.info("获取锁成功");
  48. return true;
  49. } else {
  50. logger.info("在指定的时间内未能获取到锁");
  51. if(5 <= ((Integer)executeCount.get()).intValue()) {
  52. logger.info("系统连续5次获取锁失败");
  53. return false;
  54. } else {
  55. executeCount.set(Integer.valueOf(((Integer)executeCount.get()).intValue() + 1));
  56. return this.getLook();
  57. }
  58. }
  59. } catch (InterruptedException var2) {
  60. logger.error(var2.getMessage(), var2);
  61. return false;
  62. }
  63. }
  64. public List searchUserDeptLevelOrg(String userid) {
  65. if(!this.getLook()) {
  66. return null;
  67. } else {
  68. QuickDAC quickDAC = null;
  69. try {
  70. quickDAC = new QuickDAC(this.ds.getConnection());
  71. quickDAC.preparedSql("select * from TB_USER_ROLE_DEPT_REF where USER_ID=:userid");
  72. quickDAC.setPreValue("userid", userid);
  73. List e = quickDAC.getList(TbUserRoleDeptRefPO.class);
  74. ArrayList depss = new ArrayList();
  75. if(e.size() > 0) {
  76. Iterator var6 = e.iterator();
  77. while(var6.hasNext()) {
  78. TbUserRoleDeptRefPO tbUserRoleDeptRefPO = (TbUserRoleDeptRefPO)var6.next();
  79. depss.add(tbUserRoleDeptRefPO.getOrgId());
  80. }
  81. }
  82. ArrayList var8 = depss;
  83. return var8;
  84. } catch (Exception var11) {
  85. logger.error(var11.getMessage(), var11);
  86. } finally {
  87. lock.unlock();
  88. quickDAC.destoryWithoutConnection();
  89. }
  90. return null;
  91. }
  92. }
  93. public List searchUserDChildLevOrg(String userid) {
  94. if(!this.getLook()) {
  95. return null;
  96. } else {
  97. QuickDAC quickDAC = null;
  98. try {
  99. quickDAC = new QuickDAC(this.ds.getConnection());
  100. quickDAC.preparedSql("select * from TB_USER_ROLE_DEPT_REF where USER_ID=:userid");
  101. quickDAC.setPreValue("userid", userid);
  102. List e = quickDAC.getList(TbUserRoleDeptRefPO.class);
  103. ArrayList depss = new ArrayList();
  104. Iterator orgid = e.iterator();
  105. while(orgid.hasNext()) {
  106. TbUserRoleDeptRefPO list = (TbUserRoleDeptRefPO)orgid.next();
  107. depss.add(list.getOrgId());
  108. }
  109. depss = (ArrayList)CollectionUtils.replaceList(depss);
  110. ArrayList list1 = new ArrayList();
  111. if(depss.size() > 0) {
  112. Iterator var7 = depss.iterator();
  113. while(var7.hasNext()) {
  114. String orgid1 = (String)var7.next();
  115. if(SystemCacheUtils.getOrgByOrgId(orgid1).get("IS_PARENT").toString().equalsIgnoreCase("0")) {
  116. Map org = SystemCacheUtils.getOrgByOrgId(orgid1);
  117. CollectionUtils.addListToList(list1, this.searchOrgByLRVal(quickDAC, org.get("LEFTVALUE").toString(), org.get("RIGHTVALUE").toString()));
  118. }
  119. }
  120. }
  121. CollectionUtils.addListToList(list1, depss);
  122. ArrayList var10 = list1;
  123. return var10;
  124. } catch (Exception var13) {
  125. logger.error(var13.getMessage(), var13);
  126. } finally {
  127. lock.unlock();
  128. quickDAC.destoryWithoutConnection();
  129. }
  130. return null;
  131. }
  132. }
  133. private List searchOrgByLRVal(QuickDAC qac, String leftVal, String rightVal) throws SQLException {
  134. qac.preparedSql("select * from TB_DQDP_ORGANIZATION where LEFTVALUE >:leftval and RIGHTVALUE <:rightval");
  135. qac.setPreValue("leftval", leftVal);
  136. qac.setPreValue("rightval", rightVal);
  137. List list = qac.getList(TbDqdpOrgPO.class);
  138. ArrayList orgs = new ArrayList();
  139. if(list.size() > 0) {
  140. Iterator var7 = list.iterator();
  141. while(var7.hasNext()) {
  142. TbDqdpOrgPO tbDqdpOrgPO = (TbDqdpOrgPO)var7.next();
  143. orgs.add(tbDqdpOrgPO.getOrganizationId());
  144. }
  145. }
  146. return orgs;
  147. }
  148. }

转载于:https://www.cnblogs.com/signheart/p/35171d5442c61100204cf7b54183cf45.html

权限 粒度化 到 系统 部门 部门及子部门 个人用户相关推荐

  1. 根据用户所在部门id,返回所在部门id及子部门id

    根据用户所在部门id,返回所在部门id及子部门id public StringBuilder getDepId(String depid) {StringBuilder result = new St ...

  2. Sql server 获得某一部门下的所有子部门。根据子部门获得它的上级部门。

    Sql server 获得某一部门下的所有子部门.根据部门获得它的上级部门.以为要用递归呢,原来不需要的,通过自定义函数里,使用个临时表就可以了.@@RowCount作用可真不小啊. 一.准备数据 - ...

  3. sql查询某个部门及其所以子部门信息

    – 查询id26一起研发中心及其所有子级部门 go with temp as( select * from HrmDepartment where id='26' union all select c ...

  4. java代码递归查找部门和子部门id

    1.根据传入部门的id,查找所有子部门id,返回包含传入id和子部门id集合 2.不推荐使用,我是因为数据量小,而且访问此方法的请求少才这样写 3.推荐数据库级别sql的递归查询(我没有成功实现才这样 ...

  5. Java 递归查询该部门,及其下属部门,所有用户

    Java 递归查询该部门,及其下属部门,所有用户: Set<User> userSet 作为传入参数,并将其作为返回值, 随着递归查询,执行 userSet.addAll(users); ...

  6. linux权限最小化分级,vim可视化Linux系统安全最小化原则 su sudo

    一.vim在可视化模式下编辑 crl+v,会变成-- VISUAL BLOCK --,然后用上下左右键去选中. 多行注释: ESC进入命令行模式; Ctrl+v进入VISUAL BLOCK模式 上下左 ...

  7. SAP GRC 权限合规审计系统

    引言 SAP GRC权限合规检查系统(简称AMS-R系统)是SAP ERP应用企业进行权限合规检查.违规数据抓取和IT审计的理想工具. **关键字:**SAP GRC. SAP 合规审计. SAP 财 ...

  8. C#实现winform软件开机自动启动并最小化到系统托盘

    一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine;             ...

  9. 运维部门工作总结_部门动态 | 主动出击 超前谋划 全面做好园区网络运维工作...

    随着冬季的到来 欢乐田园游客量相比客流高峰期 有所减少 公司各部门进入修整备战状态 ......... 为保障园区网络平稳良好运行 工程设备部提前部署.主动出击 狠抓网络运维保障工作 为来年迎接客流高 ...

最新文章

  1. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力
  2. 行列式计算的两种方法
  3. 1990: 分解质因数
  4. mysql 文件描述符_MySQL没有发布临时文件描述符
  5. C++编译代码的时候提示‘getInstance’ is not a member of ‘A’ A a = A::getInstance();解决办法
  6. FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全
  7. 一段C#学习代码(实现通过积分的几何意义计算积分)
  8. mysql创建用户删除权限_mysql 用户创建、授权及删除、取消权限操作
  9. 【云计算学习教程】什么是中间件?常见中间件有哪些?
  10. 开发IE插件Toolbar
  11. 最新Gxlcms有声小说系统/小说听书系统源码
  12. 在线分析图片上的字体
  13. 3轴码垛机械臂运动学逆解
  14. 成为顶流平台后 新氧阳谋峥嵘显露
  15. html图片转换特效,css3图片切换效果
  16. unity制作坦克大战
  17. 100集华为HCIE安全培训视频教材整理 | Agile Controller终端安全管理特性(一)
  18. Linux的权限管理操作
  19. 有什么翻译pdf的软件吗?告诉你几款实用的翻译软件
  20. 连接ipv6服务器未响应,IPv6过渡技术未响应

热门文章

  1. RDS For MySQL常见连接问题总结
  2. 揭秘 MWU 最佳画质游戏《永劫无间》技术历程
  3. 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
  4. 在Unity中做一个淡入式的屏幕虚化
  5. dfs——练习demo3(20届周新杰提供)
  6. 统计数据库每天的数据增长量的脚本
  7. 面试一位硕士海龟前端小姐姐有感
  8. webbrowser载入地图网页出现脚本错误解决
  9. sql2012简体中文版安装
  10. android 高清壁纸设置慢