diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java index 57a63ef71..7c5fa0cbc 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java @@ -62,8 +62,8 @@ public class PlateController { @DeleteMapping("/delete") @Operation(summary = "删除板材信息") @Parameters({ - @Parameter(name = "id", description = "编号", required = true), - @Parameter(name = "organId", description = "板材所属组织ID") + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "organId", description = "板材所属组织ID", example = "1024") }) // @PreAuthorize("@ss.hasPermission('manage:plate:delete')") @PreAuthorize("@ss.hasAnyPermissions('manage:plate:delete','base:plate:delete')") diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/framework/rpc/config/RpcConfiguration.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/framework/rpc/config/RpcConfiguration.java index bb930299b..5023818fe 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/framework/rpc/config/RpcConfiguration.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/framework/rpc/config/RpcConfiguration.java @@ -1,12 +1,13 @@ package com.cf.imes.module.manage.framework.rpc.config; import com.cf.imes.module.system.api.organ.OrganApi; +import com.cf.imes.module.system.api.permission.PermissionApi; import com.cf.imes.module.system.api.process.ProcessApi; import com.cf.imes.module.system.api.user.AdminUserApi; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {AdminUserApi.class, OrganApi.class, ProcessApi.class}) +@EnableFeignClients(clients = {AdminUserApi.class, OrganApi.class, ProcessApi.class, PermissionApi.class}) public class RpcConfiguration { } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java index 750a8047f..8c557407a 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java @@ -10,6 +10,7 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportResp import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlatePageReqVO; import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateSaveReqVO; import com.cf.imes.module.system.api.organ.OrganApi; +import com.cf.imes.module.system.api.permission.PermissionApi; import com.cf.imes.module.system.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -26,6 +27,7 @@ import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper; import javax.annotation.Resource; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS; /** @@ -43,22 +45,29 @@ public class PlateServiceImpl implements PlateService { @Resource private OrganApi organApi; + @Resource + private PermissionApi permissionApi; + + private final static String BASE_PLATE_IMPORT_PERMISSION = "base:plate:import"; // 导入板材 + private final static String BASE_PLATE_DELETE_PERMISSION = "base:plate:delete"; // 删除板材信息 + private final static String BASE_PLATE_CREATE_PERMISSION = "base:plate:create"; // 创建板材信息 + private final static String BASE_PLATE_UPDATE_PERMISSION = "base:plate:update"; // 更新板材信息 + private final static String BASE_PLATE_QUERY_PERMISSION = "base:plate:query"; // 获得板材信息 + @Override @OrganIgnore public Long createPlate(PlateSaveReqVO createReqVO) { PlateDO plate = BeanUtils.toBean(createReqVO, PlateDO.class); - if (createReqVO.getOrganId() != null && createReqVO.getOrganId() != 0 ){ - validateOrganExists(createReqVO.getOrganId()); - validateGoodExists(createReqVO.getGoodsId(), createReqVO.getOrganId()); - }else { + if (permissionApi.hasRoles(getLoginUser().getId(), BASE_PLATE_CREATE_PERMISSION).getData()){ + if (plate.getOrganId() != null && plate.getOrganId() != 0 ){ + validateOrganExists(plate.getOrganId()); + } + } else { plate.setOrganId(OrganContextHolder.getOrganId()); } // 判断板材是否存在 - PlateDO existPlate = plateMapper.selectByGoodID(createReqVO.getGoodsId(), plate.getOrganId()); + validateGoodExists(plate.getGoodsId(),plate.getOrganId()); - if (existPlate != null){ - throw exception(ErrorCodeConstants.PLATE_EXISTS); - } plateMapper.insert(plate);// 组织id未传输 // 返回 return plate.getId(); @@ -69,10 +78,13 @@ public class PlateServiceImpl implements PlateService { @Transactional(rollbackFor = Exception.class) public void updatePlate(PlateSaveReqVO updateReqVO) { // 更新 判断是否有组织id - if (updateReqVO.getOrganId() == null || updateReqVO.getOrganId() == 0){ + if (permissionApi.hasRoles(getLoginUser().getId(), BASE_PLATE_UPDATE_PERMISSION).getData()){ + if (updateReqVO.getOrganId() != null && updateReqVO.getOrganId() != 0 ){ + validateOrganExists(updateReqVO.getOrganId()); + } + } else { updateReqVO.setOrganId(OrganContextHolder.getOrganId()); } - validateOrganExists(updateReqVO.getOrganId()); // 校验存在 validatePlateExists(updateReqVO.getId(), updateReqVO.getOrganId()); @@ -84,10 +96,13 @@ public class PlateServiceImpl implements PlateService { @OrganIgnore @Transactional(rollbackFor = Exception.class) public void deletePlate(Long id,Long organId) { - if (organId == null || organId == 0){ + if (permissionApi.hasRoles(getLoginUser().getId(), BASE_PLATE_DELETE_PERMISSION).getData()){ + if (organId != null && organId != 0 ){ + validateOrganExists(organId); + } + } else { organId = OrganContextHolder.getOrganId(); } - validateOrganExists(organId); // 校验存在 validatePlateExists(id,organId); @@ -115,6 +130,13 @@ public class PlateServiceImpl implements PlateService { @Override @OrganIgnore public PageResult getPlatePage(PlatePageReqVO pageReqVO) { + if (permissionApi.hasRoles(getLoginUser().getId(), BASE_PLATE_QUERY_PERMISSION).getData()){ + if (pageReqVO.getOrganId() != null && pageReqVO.getOrganId() != 0 ){ + validateOrganExists(pageReqVO.getOrganId()); + } + } else { + pageReqVO.setOrganId(OrganContextHolder.getOrganId()); + } if (pageReqVO.getOrganId() == null || pageReqVO.getOrganId() == 0){ pageReqVO.setOrganId(OrganContextHolder.getOrganId()); } @@ -130,25 +152,32 @@ public class PlateServiceImpl implements PlateService { // if (CollUtil.isEmpty(importPlates)) { // throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLATE_IMPORT_LIST_IS_EMPTY); // } - validateOrganExists(organId); + if (permissionApi.hasRoles(getLoginUser().getId(), BASE_PLATE_IMPORT_PERMISSION).getData()){ + if (organId != null && organId != 0 ){ + validateOrganExists(organId); + } + } else { + organId = OrganContextHolder.getOrganId(); + } PlateImportRespVO respVO = PlateImportRespVO.builder().createPlateNames(new ArrayList<>()) .updatePlateNames(new ArrayList<>()).failurePlateNames(new LinkedHashMap<>()).build(); // 批量插入集合 List insertList = new ArrayList<>(); // 批量更新集合 List updateList = new ArrayList<>(); + Long finalOrganId = organId; importPlates.forEach(importPlate -> { // 判断如果不存在,在进行插入 - PlateDO existPlate = plateMapper.selectByGoodID(importPlate.getGoodsId(), organId); + PlateDO existPlate = plateMapper.selectByGoodID(importPlate.getGoodsId(), finalOrganId); if (existPlate == null) { respVO.getCreatePlateNames().add(importPlate.getGoodsName()); - insertList.add(BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(organId).setTexture(Boolean.valueOf(importPlate.getTexture()))); + insertList.add(BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(finalOrganId).setTexture(Boolean.valueOf(importPlate.getTexture()))); return; } // 判断是否允许更新 if (!isUpdateSupport) { respVO.getFailurePlateNames().put(importPlate.getGoodsName(), ErrorCodeConstants.PLATE_EXISTS.getMsg()); - PlateDO plateDO = BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(organId).setId(existPlate.getId()).setTexture(Boolean.valueOf(importPlate.getTexture())); + PlateDO plateDO = BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(finalOrganId).setId(existPlate.getId()).setTexture(Boolean.valueOf(importPlate.getTexture())); updateList.add(plateDO); } }); diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/permission/PermissionApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/permission/PermissionApi.java index 501ee8825..7f2fbaae3 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/permission/PermissionApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/permission/PermissionApi.java @@ -48,4 +48,17 @@ public interface PermissionApi { @Parameter(name = "userId", description = "用户编号", example = "2", required = true) CommonResult getDeptDataPermission(@RequestParam("userId") Long userId); + @GetMapping(PREFIX + "/user-role-id-list-by-user-id") + @Operation(summary = "获得拥有多个角色的用户编号集合") + @Parameter(name = "roleIds", description = "角色编号集合", example = "1,2", required = true) + CommonResult> getUserRoleIdListByUserIds(@RequestParam("userId") Long userId); + + @GetMapping(PREFIX + "/has-roles") + @Operation(summary = "判断用户是否拥有权限标识") + @Parameters({ + @Parameter(name = "userId", description = "用户编号", example = "1", required = true), + @Parameter(name = "permission", description = "权限标识", example = "2", required = true) + }) + CommonResult hasRoles(@RequestParam("userId") Long userId, + @RequestParam("permission") String permission); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/permission/PermissionApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/permission/PermissionApiImpl.java index e4941eeab..50dd62b48 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/permission/PermissionApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/permission/PermissionApiImpl.java @@ -40,4 +40,15 @@ public class PermissionApiImpl implements PermissionApi { return success(deptDataPermission); } + @Override + public CommonResult> getUserRoleIdListByUserIds(Long userId) { + return success(permissionService.getUserPermissions(userId)); + } + + @Override + public CommonResult hasRoles(Long userId, String permission) { + Set permissions = permissionService.getUserPermissions(userId); + return success(permissions.contains(permission)); + } + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java index a25753af1..324021b33 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java @@ -171,4 +171,14 @@ public interface PermissionService { * @return */ Set getListRoleUsers(Long roleId, Long organId); + + /** + * 获取用户权限标识 + */ + Set getUserPermissions(Long userId); + + /** + * 判断用户是否拥有相对应的权限 + */ + Boolean hasPermission(Long userId, String permission); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java index 76c5947eb..a7eec5271 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java @@ -18,6 +18,7 @@ import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO; import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleUserReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; +import com.cf.imes.module.system.convert.auth.AuthConvert; import com.cf.imes.module.system.dal.dataobject.permission.MenuDO; import com.cf.imes.module.system.dal.dataobject.permission.RoleDO; import com.cf.imes.module.system.dal.dataobject.permission.RoleMenuDO; @@ -53,8 +54,10 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ROLE_ME_ERROR; /** @@ -596,4 +599,31 @@ public class PermissionServiceImpl implements PermissionService { return SpringUtil.getBean(getClass()); } + /** + * 获取用户权限标识 + */ + @Override + public Set getUserPermissions(Long userId) { + // 1.2 获得角色列表 + Set roleIds = getUserRoleIdListByUserId(getLoginUserId()); + if (CollUtil.isEmpty(roleIds)) { + return Collections.emptySet(); + } + List roles = roleService.getRoleList1(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 + + // 1.3 获得菜单列表 + Set menuIds = getRoleMenuListByRoleId2(convertSet(roles, RoleDO::getId)); + List menuList = menuService.getMenuList1(menuIds); + menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 + + return convertSet(menuList, MenuDO::getPermission); + } + + @Override + public Boolean hasPermission(Long userId, String permission) { + Set permissions = getUserPermissions(userId); + return permissions.contains(permission); + } + }