|
@@ -0,0 +1,148 @@
|
|
|
|
+package cn.com.qmth.examcloud.service.core.service;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
|
|
+
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.util.Assert;
|
|
|
|
+
|
|
|
|
+import cn.com.qmth.examcloud.service.core.entity.Permission;
|
|
|
|
+import cn.com.qmth.examcloud.service.core.entity.RolePermissionRelation;
|
|
|
|
+import cn.com.qmth.examcloud.service.core.enums.PermissionType;
|
|
|
|
+import cn.com.qmth.examcloud.service.core.repo.RolePermissionRelationRepo;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ *
|
|
|
|
+ * @author chenken
|
|
|
|
+ * @date 2017年6月15日下午3:15:53
|
|
|
|
+ * @company QMTH
|
|
|
|
+ * @description
|
|
|
|
+ */
|
|
|
|
+@Service("rolePermissionRelationService")
|
|
|
|
+public class RolePermissionRelationServiceImpl implements RolePermissionRelationService{
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private RolePermissionRelationRepo rolePermissionRelationRepo;
|
|
|
|
+ @Autowired
|
|
|
|
+ private PermissionService permissionService;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String,List<Permission>> findPermissionByRole(RolePermissionRelation rolePermissionRelation) {
|
|
|
|
+ Map<String,List<Permission>> returnMap = new HashMap<String, List<Permission>>();
|
|
|
|
+ String menuType = PermissionType.MENU.name();
|
|
|
|
+ returnMap.put(menuType,findMenuPermissionByRole(rolePermissionRelation));
|
|
|
|
+ String pageType = PermissionType.PAGE.name();
|
|
|
|
+ returnMap.put(pageType,findPagePermissionByRole(rolePermissionRelation));
|
|
|
|
+ return returnMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询菜单权限
|
|
|
|
+ * @param rolePermissionRelation
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private List<Permission> findMenuPermissionByRole(RolePermissionRelation rolePermissionRelation){
|
|
|
|
+ List<String> roleCodes = rolePermissionRelation.getRoleCodes();
|
|
|
|
+ List<RolePermissionRelation> relations = new ArrayList<RolePermissionRelation>();
|
|
|
|
+ for(String roleCode:roleCodes){
|
|
|
|
+ String systemName = rolePermissionRelation.getSystemName();
|
|
|
|
+ String permissionType = PermissionType.MENU.name();
|
|
|
|
+ relations.addAll(rolePermissionRelationRepo.findByRoleCodeAndSystemNameAndPermissionType(roleCode, systemName,permissionType));
|
|
|
|
+ }
|
|
|
|
+ Set<Integer> permissionIds = new HashSet<Integer>();
|
|
|
|
+ for(RolePermissionRelation relation:relations){
|
|
|
|
+ permissionIds.add(relation.getPermissionId());
|
|
|
|
+ }
|
|
|
|
+ List<Integer> ids = new ArrayList<Integer>(permissionIds);
|
|
|
|
+ List<Permission> permissions = permissionService.findPermissionByIds(ids);
|
|
|
|
+ //组装树形关系结构
|
|
|
|
+ Map<Integer,Permission> permissionMap = new HashMap<Integer, Permission>();
|
|
|
|
+ for(Permission permission:permissions){
|
|
|
|
+ permissionMap.put(permission.getId(), permission);
|
|
|
|
+ }
|
|
|
|
+ for(Permission p:permissions){
|
|
|
|
+ Permission permission = permissionMap.get(p.getParentId());
|
|
|
|
+ if(permission!=null){
|
|
|
|
+ if(permission.getSubPermissions()==null){
|
|
|
|
+ permission.setSubPermissions(new ArrayList<Permission>());
|
|
|
|
+ }
|
|
|
|
+ permission.getSubPermissions().add(p);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 返回一级节点
|
|
|
|
+ List<Permission> permissionNodes = new ArrayList<Permission>();
|
|
|
|
+ for(Permission permission:permissions){
|
|
|
|
+ if(permission.getParentId()==null){
|
|
|
|
+ permissionNodes.add(permission);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return permissionNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询菜单权限
|
|
|
|
+ * @param rolePermissionRelation
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private List<Permission> findPagePermissionByRole(RolePermissionRelation rolePermissionRelation){
|
|
|
|
+ List<String> roleCodes = rolePermissionRelation.getRoleCodes();
|
|
|
|
+ List<RolePermissionRelation> relations = new ArrayList<RolePermissionRelation>();
|
|
|
|
+ for(String roleCode:roleCodes){
|
|
|
|
+ String systemName = rolePermissionRelation.getSystemName();
|
|
|
|
+ String permissionType = PermissionType.PAGE.name();
|
|
|
|
+ relations.addAll(rolePermissionRelationRepo.findByRoleCodeAndSystemNameAndPermissionType(roleCode, systemName,permissionType));
|
|
|
|
+ }
|
|
|
|
+ Set<Integer> permissionIds = new HashSet<Integer>();
|
|
|
|
+ for(RolePermissionRelation relation:relations){
|
|
|
|
+ permissionIds.add(relation.getPermissionId());
|
|
|
|
+ }
|
|
|
|
+ List<Integer> ids = new ArrayList<Integer>(permissionIds);
|
|
|
|
+ List<Permission> permissions = permissionService.findPermissionByIds(ids);
|
|
|
|
+ return permissions;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public void saveRolePermission(RolePermissionRelation rolePermissionRelation) {
|
|
|
|
+ String roleCode = rolePermissionRelation.getRoleCode();
|
|
|
|
+ String systemName = rolePermissionRelation.getSystemName();
|
|
|
|
+ String permissionType = rolePermissionRelation.getPermissionType();
|
|
|
|
+ deleteRolePermission(roleCode, systemName,permissionType);
|
|
|
|
+ List<RolePermissionRelation> relationList = new ArrayList<RolePermissionRelation>();
|
|
|
|
+ for(Integer permissionId:rolePermissionRelation.getPermissionIds()){
|
|
|
|
+ RolePermissionRelation relation = new RolePermissionRelation();
|
|
|
|
+ relation.setRoleCode(roleCode);
|
|
|
|
+ relation.setSystemName(systemName);
|
|
|
|
+ relation.setPermissionType(permissionType);
|
|
|
|
+ relation.setPermissionId(permissionId);
|
|
|
|
+ relationList.add(relation);
|
|
|
|
+ }
|
|
|
|
+ rolePermissionRelationRepo.save(relationList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void deleteRolePermission(String roleCode, String systemName,String permissionType) {
|
|
|
|
+ rolePermissionRelationRepo.deleteByRoleCodeAndSystemNameAndPermissionType(roleCode, systemName,permissionType);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<RolePermissionRelation> findPermission(String systemName,String roleCode,String permissionType) {
|
|
|
|
+ Assert.hasLength(systemName, "systemName 不能为空");
|
|
|
|
+ Assert.hasLength(roleCode, "roleCode 不能为空");
|
|
|
|
+ return rolePermissionRelationRepo.findByRoleCodeAndSystemNameAndPermissionType(roleCode, systemName, permissionType);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //by weiwenhai 根据权限id查询权限角色
|
|
|
|
+ @Override
|
|
|
|
+ public List<RolePermissionRelation> findRolePermissionRelationByPermissonId(Integer id) {
|
|
|
|
+ return rolePermissionRelationRepo.findByPermissionId(id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|