PermissionGroupServiceImpl.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. package jnpf.permission.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import jnpf.base.service.SuperServiceImpl;
  6. import jnpf.constant.PermissionConst;
  7. import jnpf.permission.entity.*;
  8. import jnpf.permission.mapper.PermissionGroupMapper;
  9. import jnpf.permission.model.permissiongroup.PaginationPermissionGroup;
  10. import jnpf.permission.service.*;
  11. import jnpf.util.RandomUtil;
  12. import jnpf.util.StringUtil;
  13. import jnpf.util.type.AuthorizeType;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. import java.util.Objects;
  20. import java.util.stream.Collectors;
  21. @Service
  22. public class PermissionGroupServiceImpl extends SuperServiceImpl<PermissionGroupMapper, PermissionGroupEntity> implements PermissionGroupService {
  23. @Autowired
  24. private UserService userService;
  25. @Autowired
  26. private UserRelationService userRelationService;
  27. @Autowired
  28. private PositionService positionService;
  29. @Autowired
  30. private GroupService groupService;
  31. @Autowired
  32. private AuthorizeService authorizeService;
  33. @Autowired
  34. private OrganizeService organizeService;
  35. @Override
  36. public List<PermissionGroupEntity> list(PaginationPermissionGroup pagination) {
  37. boolean flag = false;
  38. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  39. String keyword = pagination.getKeyword();
  40. if (StringUtil.isNotEmpty(keyword)) {
  41. flag = true;
  42. queryWrapper.lambda().and(
  43. t -> t.like(PermissionGroupEntity::getFullName, keyword)
  44. .or().like(PermissionGroupEntity::getEnCode, keyword)
  45. .or().like(PermissionGroupEntity::getDescription, keyword)
  46. );
  47. }
  48. if (pagination.getEnabledMark() != null) {
  49. queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, pagination.getEnabledMark());
  50. }
  51. queryWrapper.lambda().orderByAsc(PermissionGroupEntity::getSortCode).orderByDesc(PermissionGroupEntity::getCreatorTime);
  52. if (flag) {
  53. queryWrapper.lambda().orderByDesc(PermissionGroupEntity::getLastModifyTime);
  54. }
  55. Page<PermissionGroupEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  56. IPage<PermissionGroupEntity> iPage = this.page(page, queryWrapper);
  57. return pagination.setData(iPage.getRecords(), iPage.getTotal());
  58. }
  59. @Override
  60. public List<PermissionGroupEntity> list(boolean filterEnabledMark, List<String> ids) {
  61. if (ids != null && ids.size() == 0) {
  62. return new ArrayList<>();
  63. }
  64. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  65. if (filterEnabledMark) {
  66. queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, 1);
  67. }
  68. if (ids != null && ids.size() > 0) {
  69. queryWrapper.lambda().in(PermissionGroupEntity::getId, ids);
  70. }
  71. return this.list(queryWrapper);
  72. }
  73. @Override
  74. public PermissionGroupEntity info(String id) {
  75. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  76. queryWrapper.lambda().eq(PermissionGroupEntity::getId, id);
  77. return this.getOne(queryWrapper);
  78. }
  79. @Override
  80. public boolean create(PermissionGroupEntity entity) {
  81. entity.setId(RandomUtil.uuId());
  82. return this.save(entity);
  83. }
  84. @Override
  85. public boolean update(String id, PermissionGroupEntity entity) {
  86. entity.setId(id);
  87. return this.updateById(entity);
  88. }
  89. @Override
  90. public boolean delete(PermissionGroupEntity entity) {
  91. return this.removeById(entity);
  92. }
  93. @Override
  94. public boolean isExistByFullName(String id, PermissionGroupEntity entity) {
  95. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  96. queryWrapper.lambda().eq(PermissionGroupEntity::getFullName, entity.getFullName());
  97. if (StringUtil.isNotEmpty(id)) {
  98. queryWrapper.lambda().ne(PermissionGroupEntity::getId, id);
  99. }
  100. return this.count(queryWrapper) > 0;
  101. }
  102. @Override
  103. public boolean isExistByEnCode(String id, PermissionGroupEntity entity) {
  104. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  105. queryWrapper.lambda().eq(PermissionGroupEntity::getEnCode, entity.getEnCode());
  106. if (StringUtil.isNotEmpty(id)) {
  107. queryWrapper.lambda().ne(PermissionGroupEntity::getId, id);
  108. }
  109. return this.count(queryWrapper) > 0;
  110. }
  111. @Override
  112. public PermissionGroupEntity permissionMember(String id) {
  113. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  114. queryWrapper.lambda().eq(PermissionGroupEntity::getId, id);
  115. queryWrapper.lambda().select(PermissionGroupEntity::getId, PermissionGroupEntity::getPermissionMember);
  116. return this.getOne(queryWrapper);
  117. }
  118. @Override
  119. public List<PermissionGroupEntity> getPermissionGroupByUserId(String userId, String organizeId, boolean singletonOrg, String systemId) {
  120. List<PermissionGroupEntity> list = new ArrayList<>();
  121. // 用户本身有没有权限
  122. UserEntity userEntity = userService.getInfo(userId);
  123. if (userEntity == null) {
  124. return list;
  125. }
  126. List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0, t.getType())).collect(Collectors.toList());
  127. allGroupList.forEach(permissionGroupEntity -> {
  128. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
  129. list.add(permissionGroupEntity);
  130. }
  131. });
  132. List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
  133. String finalUserId = userId + "--" + PermissionConst.USER;
  134. List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(finalUserId)).collect(Collectors.toList());
  135. collect.forEach(permissionGroupEntity -> {
  136. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
  137. list.add(permissionGroupEntity);
  138. }
  139. });
  140. // 用户关系表
  141. List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId()).stream().filter(r -> StringUtil.isNotEmpty(r.getObjectId())).collect(Collectors.toList());
  142. // 分组有没有权限
  143. List<String> groupIds = new ArrayList<>();
  144. List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType()))
  145. .map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  146. List<String> groupName = groupService.getListByIds(groupId)
  147. .stream().map(GroupEntity::getId).collect(Collectors.toList());
  148. groupName.forEach(t -> groupIds.add(t + "--group"));
  149. for (String id : groupIds) {
  150. List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id)).collect(Collectors.toList());
  151. collect1.forEach(permissionGroupEntity -> {
  152. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), systemId)) {
  153. list.add(permissionGroupEntity);
  154. }
  155. });
  156. }
  157. // 组织有权限
  158. List<String> organizeIds = new ArrayList<>();
  159. List<String> orgIds = new ArrayList<>();
  160. if (list.size() > 0) {
  161. // 当前组织及组织下岗位、角色权限组
  162. organizeIds.add(userEntity.getOrganizeId());
  163. } else {
  164. // 此情况下不找
  165. if (StringUtil.isNotEmpty(organizeId)) {
  166. organizeIds.add(organizeId);
  167. } else {
  168. // 找到一个有权限的组织、岗位、角色
  169. List<UserRelationEntity> listByObjectType = userRelationService.getListByObjectType(userId, PermissionConst.ORGANIZE);
  170. List<String> collect2 = listByObjectType.stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  171. organizeIds.addAll(collect2);
  172. organizeIds.add(userEntity.getOrganizeId());
  173. }
  174. }
  175. // 拼上后缀
  176. if (organizeIds.size() > 0) {
  177. List<String> collect1 = new ArrayList<>();
  178. collect1.addAll(organizeService.getOrgEntityList(organizeIds, true)
  179. .stream().map(OrganizeEntity::getId).collect(Collectors.toList()));
  180. orgIds.addAll(collect1);
  181. collect1.forEach(t -> {
  182. orgIds.add(t + "--" + PermissionConst.COMPANY);
  183. orgIds.add(t + "--" + PermissionConst.DEPARTMENT);
  184. });
  185. }
  186. return list;
  187. }
  188. @Override
  189. public String getPermissionGroupByUserId(String userId) {
  190. // 用户本身有没有权限
  191. UserEntity userEntity = userService.getInfo(userId);
  192. if (userEntity == null) {
  193. return "";
  194. }
  195. List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0, t.getType())).collect(Collectors.toList());
  196. for (PermissionGroupEntity permissionGroupEntity : allGroupList) {
  197. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
  198. return "";
  199. }
  200. }
  201. List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
  202. String finalUserId = userId + "--" + PermissionConst.USER;
  203. List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(finalUserId)).collect(Collectors.toList());
  204. for (PermissionGroupEntity permissionGroupEntity : collect) {
  205. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
  206. return "";
  207. }
  208. }
  209. // 用户关系表
  210. List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId());
  211. // 分组有没有权限
  212. List<String> groupIds = new ArrayList<>();
  213. List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType()))
  214. .map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  215. List<String> groupName = groupService.getListByIds(groupId)
  216. .stream().map(GroupEntity::getId).collect(Collectors.toList());
  217. groupName.forEach(t -> groupIds.add(t + "--group"));
  218. for (String id : groupIds) {
  219. List<PermissionGroupEntity> collect1 = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(id)).collect(Collectors.toList());
  220. for (PermissionGroupEntity permissionGroupEntity : collect1) {
  221. if (authorizeService.existAuthorize(permissionGroupEntity.getId(), null)) {
  222. return "";
  223. }
  224. }
  225. }
  226. // 组织有权限
  227. List<String> orgIds = new ArrayList<>();
  228. List<UserRelationEntity> listByObjectType = userRelationService.getListByObjectType(userId, PermissionConst.ORGANIZE);
  229. List<String> collect2 = new ArrayList<>();
  230. collect2.add(userEntity.getOrganizeId());
  231. collect2.addAll(listByObjectType.stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList()));
  232. orgIds.addAll(collect2);
  233. collect2.forEach(t -> {
  234. orgIds.add(t + "--" + PermissionConst.COMPANY);
  235. orgIds.add(t + "--" + PermissionConst.DEPARTMENT);
  236. });
  237. return "";
  238. }
  239. @Override
  240. public String getOrgIdByUserIdAndSystemId(String userId, String systemId) {
  241. // 用户本身有没有权限
  242. UserEntity userEntity = userService.getInfo(userId);
  243. if (userEntity == null) {
  244. return "";
  245. }
  246. // 判断有这个应用的权限组有哪些
  247. List<String> collect = authorizeService.getListByObjectAndItemIdAndType(systemId, PermissionConst.SYSTEM).stream().map(AuthorizeEntity::getObjectId).collect(Collectors.toList());
  248. List<PermissionGroupEntity> list = this.list(true, collect).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
  249. List<PermissionGroupEntity> allGroupList = this.list(true, collect).stream().filter(t -> Objects.equals(0, t.getType())).collect(Collectors.toList());
  250. if (allGroupList.size() > 0) {
  251. return "";
  252. }
  253. List<String> objectIds = new ArrayList<>();
  254. objectIds.add(userId + "--" + PermissionConst.USER);
  255. // 用户关系
  256. List<UserRelationEntity> listByUserId = userRelationService.getListByUserId(userEntity.getId())
  257. .stream().filter(t -> userId.equals(t.getUserId())).collect(Collectors.toList());
  258. // 分组
  259. List<String> groupId = listByUserId.stream().filter(t -> PermissionConst.GROUP.equals(t.getObjectType())).map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  260. List<String> groupName = groupService.getListByIds(groupId)
  261. .stream().map(GroupEntity::getId).collect(Collectors.toList());
  262. groupName.forEach(t -> {
  263. objectIds.add(t + "--group");
  264. });
  265. for (String objectId : objectIds) {
  266. List<PermissionGroupEntity> collect1 = list.stream().filter(t -> t.getPermissionMember().contains(objectId)).collect(Collectors.toList());
  267. if (collect1.size() > 0) {
  268. return "";
  269. }
  270. }
  271. // 组织
  272. List<String> orgIds = listByUserId.stream().filter(t -> PermissionConst.ORGANIZE.equals(t.getObjectType())).map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  273. List<OrganizeEntity> orgEntityList = organizeService.getOrgEntityList(orgIds, true);
  274. List<PositionEntity> listByOrganizeId = positionService.getListByOrganizeId(orgIds, false);
  275. return "";
  276. }
  277. @Override
  278. public List<PermissionGroupEntity> getPermissionGroupAllByUserId(String userId) {
  279. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  280. queryWrapper.lambda().like(PermissionGroupEntity::getPermissionMember, userId);
  281. queryWrapper.lambda().eq(PermissionGroupEntity::getEnabledMark, 1);
  282. return this.list(queryWrapper);
  283. // UserEntity userEntity = userService.getInfo(userId);
  284. // // 通过用户id获取相关的组织、部门、岗位、角色、分组
  285. // if (userEntity == null) {
  286. // return new ArrayList<>();
  287. // }
  288. // if (userEntity.getIsAdministrator() == 1) {
  289. // return this.list(true, null);
  290. // }
  291. // Set<String> objIds = new HashSet<>();
  292. //
  293. // // 用户与组织关系
  294. // List<String> orgIds = new ArrayList<>();
  295. // List<String> orgId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.ORGANIZE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  296. // orgId.forEach(t -> orgIds.add(t + "--" + PermissionConst.ORGANIZE));
  297. // // 用户与岗位关系
  298. // List<String> positionIds = new ArrayList<>();
  299. // List<String> positionId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.POSITION).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  300. // positionId.forEach(t -> positionIds.add(t + "--" + PermissionConst.POSITION));
  301. // // 用户与角色关系
  302. // List<String> roleIds = new ArrayList<>();
  303. // List<String> roleId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.ROLE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  304. // roleId.forEach(t -> roleIds.add(t + "--" + PermissionConst.ROLE));
  305. // // 用户与跟分组关系
  306. // List<String> groupIds = new ArrayList<>();
  307. // List<String> groupId = userRelationService.getListByObjectType(userEntity.getId(), PermissionConst.GROUP).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  308. // groupId.forEach(t -> groupIds.add(t + "--" + PermissionConst.GROUP));
  309. //
  310. // objIds.addAll(orgIds);
  311. // objIds.addAll(positionIds);
  312. // objIds.addAll(roleIds);
  313. // objIds.addAll(groupIds);
  314. //
  315. // Set<String> permissionGroupIds = new HashSet<>();
  316. //
  317. // List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null);
  318. // objIds.forEach(objId -> {
  319. // List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> entity.getPermissionMember().contains(objId)).collect(Collectors.toList());
  320. // if (collect.size() > 0) {
  321. // permissionGroupIds.addAll(collect.stream().map(PermissionGroupEntity::getId).collect(Collectors.toList()));
  322. // }
  323. // });
  324. // return this.list(true, new ArrayList<>(permissionGroupIds));
  325. }
  326. @Override
  327. @Transactional
  328. public boolean updateByUser(String fromId, String toId, List<String> permissionList) {
  329. if (StringUtil.isEmpty(fromId)) {
  330. return false;
  331. }
  332. String fromIds = fromId + "--" + PermissionConst.USER;
  333. List<PermissionGroupEntity> permissionGroupAllByUserId = this.getPermissionGroupAllByUserId(fromId);
  334. permissionGroupAllByUserId.forEach(t -> {
  335. if (permissionList.contains(t.getId())) {
  336. t.setPermissionMember(StringUtil.isNotEmpty(t.getPermissionMember()) ? t.getPermissionMember().replaceAll(fromIds, toId + "--" + PermissionConst.USER) : "");
  337. this.updateById(t);
  338. }
  339. });
  340. return true;
  341. }
  342. @Override
  343. public List<PermissionGroupEntity> getPermissionGroupByModuleId(String moduleId) {
  344. // 获取到菜单和权限组的关系
  345. List<AuthorizeEntity> authorizeEntityList = authorizeService.getListByObjectAndItem(moduleId, AuthorizeType.MODULE);
  346. // 获取权限组信息
  347. List<PermissionGroupEntity> list = this.list(true,
  348. authorizeEntityList.stream().map(AuthorizeEntity::getObjectId).collect(Collectors.toList()));
  349. return list;
  350. }
  351. @Override
  352. public List<PermissionGroupEntity> list(List<String> ids) {
  353. if (ids.size() == 0) {
  354. return new ArrayList<>();
  355. }
  356. QueryWrapper<PermissionGroupEntity> queryWrapper = new QueryWrapper<>();
  357. queryWrapper.lambda().in(PermissionGroupEntity::getId, ids);
  358. return this.list(queryWrapper);
  359. }
  360. @Override
  361. public List<PermissionGroupEntity> getPermissionGroupByObjectId(String objectId, String objectType) {
  362. List<PermissionGroupEntity> permissionGroupEntities = this.list(true, null).stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).collect(Collectors.toList());
  363. String id = objectId + "--" + objectType;
  364. List<String> idList = new ArrayList<>();
  365. idList.add(id);
  366. if (PermissionConst.USER.equalsIgnoreCase(objectType)) {
  367. List<UserRelationEntity> allOrgRelationByUserId = userRelationService.getListByObjectType(objectId, null);
  368. for (UserRelationEntity item : allOrgRelationByUserId) {
  369. String oType = item.getObjectType();
  370. if (PermissionConst.ORGANIZE.equals(oType)) {
  371. oType = PermissionConst.COMPANY;
  372. idList.add(item.getObjectId() + "--" + PermissionConst.DEPARTMENT);
  373. }
  374. idList.add(item.getObjectId() + "--" + oType.toLowerCase());
  375. }
  376. }
  377. List<PermissionGroupEntity> collect = permissionGroupEntities.stream().filter(entity -> {
  378. boolean hashOperations = false;
  379. for (String s : idList) {
  380. if (entity.getPermissionMember().contains(s)) {
  381. hashOperations = true;
  382. break;
  383. }
  384. }
  385. return hashOperations;
  386. }).collect(Collectors.toList());
  387. List<PermissionGroupEntity> allGroupList = this.list(true, null).stream().filter(t -> Objects.equals(0, t.getType())).collect(Collectors.toList());
  388. for (PermissionGroupEntity entity : allGroupList) {
  389. if (!collect.contains(entity)) {
  390. collect.add(entity);
  391. }
  392. }
  393. return collect;
  394. }
  395. }