package jnpf.permission.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.google.common.collect.ImmutableList; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.controller.SuperController; import jnpf.base.vo.ListVO; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.constant.MsgCode; import jnpf.constant.PermissionConst; import jnpf.model.FlowWorkModel; import jnpf.permission.PermissionGroupApi; import jnpf.permission.entity.*; import jnpf.permission.model.permissiongroup.PaginationPermissionGroup; import jnpf.permission.model.permissiongroup.PermissionGroupListVO; import jnpf.permission.model.permissiongroup.PermissionGroupModel; import jnpf.permission.model.permissiongroup.ViewPermissionsModel; import jnpf.permission.model.user.UserIdListVo; import jnpf.permission.model.user.mod.UserIdModel; import jnpf.permission.model.user.vo.BaseInfoVo; import jnpf.permission.service.*; import jnpf.util.JsonUtil; import jnpf.util.RandomUtil; import jnpf.util.StringUtil; import jnpf.util.UserProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; @RestController @Tag(name = "权限组控制器", description = "PermissionGroup") @RequestMapping("/PermissionGroup") public class PermissionGroupController extends SuperController implements PermissionGroupApi { @Autowired private PermissionGroupService permissionGroupService; @Autowired private UserService userService; @Autowired private AuthorizeService authorizeService; @Autowired private OrganizeService organizeService; @Autowired private PositionService positionService; @Autowired private RoleService roleService; @Autowired private GroupService groupService; /** * 列表 * * @param pagination 分页模型 * @return */ @Operation(summary = "列表") @SaCheckPermission("permission.authorize") @GetMapping public ActionResult> list(PaginationPermissionGroup pagination) { List data = new ArrayList<>(); List list = JsonUtil.getJsonToList(data, PermissionGroupListVO.class); list.forEach(t -> { String permissionMember = t.getPermissionMember(); if (StringUtil.isEmpty(permissionMember)) { t.setPermissionMember(""); return; } List fullNameByIds = userService.getFullNameByIds(Arrays.asList(permissionMember.split(","))); StringJoiner stringJoiner = new StringJoiner(","); fullNameByIds.forEach(stringJoiner::add); t.setPermissionMember(stringJoiner.toString()); }); PaginationVO paginationVO = JsonUtil.getJsonToBean(pagination, PaginationVO.class); return ActionResult.page(list, paginationVO); } /** * 下拉选择 * * @return */ @Operation(summary = "下拉框") @SaCheckPermission("permission.authorize") @GetMapping("/Selector") public ActionResult> list() { List data = permissionGroupService.list(true, null); List list = JsonUtil.getJsonToList(data, FlowWorkModel.class); list.forEach(t -> t.setIcon("icon-ym icon-ym-authGroup")); ListVO listVO = new ListVO<>(); listVO.setList(list); return ActionResult.success(listVO); } /** * 查看权限成员 * * @param id 主键 * @return */ @Operation(summary = "权限成员") @SaCheckPermission("permission.authorize") @Parameter(name = "id", description = "主键", required = true) @GetMapping("/PermissionMember/{id}") public ActionResult> permissionMember(@PathVariable("id") String id) { PermissionGroupEntity entity = permissionGroupService.getById(id); if (entity == null) { return ActionResult.fail(MsgCode.FA003.get()); } ListVO listVO = new ListVO<>(); List list = new ArrayList<>(); if (StringUtil.isEmpty(entity.getPermissionMember())) { listVO.setList(list); return ActionResult.success(listVO); } List ids = Arrays.asList(entity.getPermissionMember().split(",")).stream().distinct().collect(Collectors.toList()); list = userService.selectedByIds(ids); listVO.setList(list); return ActionResult.success(listVO); } /** * 保存权限成员 * * @param id 主键 * @param userIdModel 用户id模型 * @return */ @Operation(summary = "保存权限成员") @SaCheckPermission("permission.authorize") @Parameters({ @Parameter(name = "id", description = "主键", required = true), @Parameter(name = "userIdModel", description = "用户id模型", required = true) }) @PostMapping("/PermissionMember/{id}") public ActionResult> savePermissionMember(@PathVariable("id") String id, @RequestBody UserIdModel userIdModel) { PermissionGroupEntity entity = permissionGroupService.info(id); if (entity == null) { return ActionResult.fail(MsgCode.FA003.get()); } //删除退出的用户 List oldPermission = StringUtil.isNotEmpty(entity.getPermissionMember()) ? Arrays.asList(entity.getPermissionMember().split(",")) : new ArrayList<>(); // List permission = userIdModel.getIds(); // List allUpdateIds = oldPermission.stream().filter(t->!permission.contains(t)).collect(Collectors.toList()); List deleteUser = userService.getUserIdList(oldPermission); //保存新的用户 StringJoiner stringJoiner = new StringJoiner(","); List userId = userIdModel.getIds(); userId.forEach(t -> { stringJoiner.add(t); }); entity.setPermissionMember(stringJoiner.toString()); // 修改前的用户 List member = permissionGroupService.list(Collections.singletonList(id)) .stream().filter(t -> StringUtil.isNotEmpty(t.getPermissionMember())).map(PermissionGroupEntity::getPermissionMember).collect(Collectors.toList()); // 新的用户 member.addAll(userId); member = member.stream().distinct().collect(Collectors.toList()); List userIdList = userService.getUserIdList(member); permissionGroupService.update(id, entity); userService.delCurRoleUser(MsgCode.PS010.get(), Collections.singletonList(id)); //移除权限缓存 authorizeService.removeAuthByUserOrMenu(deleteUser, null); return ActionResult.success(MsgCode.SU002.get()); } /** * 详情 * * @param id 主键 * @return */ @Operation(summary = "详情") @SaCheckPermission("permission.authorize") @Parameter(name = "id", description = "主键", required = true) @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id) { PermissionGroupEntity entity = permissionGroupService.info(id); if (entity == null) { return ActionResult.fail(MsgCode.FA003.get()); } PermissionGroupModel model = JsonUtil.getJsonToBean(entity, PermissionGroupModel.class); return ActionResult.success(model); } /** * 新建 * * @param model 模型 * @return */ @Operation(summary = "新建") @SaCheckPermission("permission.authorize") @Parameter(name = "id", description = "模型", required = true) @PostMapping public ActionResult crete(@RequestBody PermissionGroupModel model) { PermissionGroupEntity entity = JsonUtil.getJsonToBean(model, PermissionGroupEntity.class); if (permissionGroupService.isExistByFullName(entity.getId(), entity)) { return ActionResult.fail(MsgCode.EXIST001.get()); } if (permissionGroupService.isExistByEnCode(entity.getId(), entity)) { return ActionResult.fail(MsgCode.EXIST002.get()); } permissionGroupService.create(entity); return ActionResult.success(MsgCode.SU001.get()); } /** * 修改 * * @param id 主键 * @param model 模型 * @return */ @Operation(summary = "修改") @SaCheckPermission("permission.authorize") @Parameters({ @Parameter(name = "id", description = "主键", required = true), @Parameter(name = "model", description = "模型", required = true) }) @PutMapping("/{id}") public ActionResult update(@PathVariable("id") String id, @RequestBody PermissionGroupModel model) { PermissionGroupEntity entity = JsonUtil.getJsonToBean(model, PermissionGroupEntity.class); if (permissionGroupService.isExistByFullName(id, entity)) { return ActionResult.fail(MsgCode.EXIST001.get()); } if (permissionGroupService.isExistByEnCode(id, entity)) { return ActionResult.fail(MsgCode.EXIST002.get()); } userService.delCurRoleUser(MsgCode.PS010.get(), Collections.singletonList(id)); permissionGroupService.update(id, entity); return ActionResult.success(MsgCode.SU004.get()); } /** * 删除 * * @param id 主键 * @return */ @Operation(summary = "删除") @SaCheckPermission("permission.authorize") @Parameter(name = "id", description = "主键", required = true) @DeleteMapping("/{id}") public ActionResult delete(@PathVariable("id") String id) { PermissionGroupEntity entity = permissionGroupService.info(id); if (entity == null) { return ActionResult.fail(MsgCode.FA003.get()); } userService.delCurRoleUser(MsgCode.PS010.get(), ImmutableList.of(id)); permissionGroupService.delete(entity); return ActionResult.success(MsgCode.SU003.get()); } /** * 复制 * * @param id 主键 * @return */ @Operation(summary = "复制") @SaCheckPermission("permission.authorize") @Parameter(name = "id", description = "主键", required = true) @PostMapping("/{id}/Actions/Copy") @Transactional public ActionResult copy(@PathVariable("id") String id) { PermissionGroupEntity entity = permissionGroupService.info(id); if (entity == null) { return ActionResult.fail(MsgCode.FA004.get()); } String copyNum = UUID.randomUUID().toString().substring(0, 5); entity.setFullName(entity.getFullName() + ".副本" + copyNum); if (entity.getFullName().length() > 50) return ActionResult.fail(MsgCode.COPY001.get()); entity.setEnCode(entity.getEnCode() + copyNum); entity.setId(RandomUtil.uuId()); entity.setEnabledMark(0); entity.setCreatorTime(new Date()); entity.setCreatorUserId(UserProvider.getLoginUserId()); entity.setLastModifyTime(null); entity.setLastModifyUserId(null); permissionGroupService.save(entity); // 赋值权限表 List listByObjectId = authorizeService.getListByObjectId(Collections.singletonList(id)); listByObjectId.forEach(t -> { t.setId(RandomUtil.uuId()); t.setObjectId(entity.getId()); }); authorizeService.saveBatch(listByObjectId); return ActionResult.success(MsgCode.SU007.get()); } /** * 获取菜单权限返回权限组 * * @param model 模型 * @return ignore */ @Operation(summary = "获取菜单权限返回权限组") @Parameters({ @Parameter(name = "id", description = "主键", required = true) }) @GetMapping("/getPermissionGroup") public ActionResult> getPermissionGroup(ViewPermissionsModel model) { String objectType = model.getObjectType(); String id = model.getId(); if (checkDataById(id, objectType)) { return ActionResult.fail(MsgCode.FA001.get()); } Map map = new HashMap<>(2); int type = 0; // 0未开启权限,1有 List list = new ArrayList<>(); List permissionGroupByUserId = new ArrayList<>(); // List permissionGroupByUserId = permissionGroupService.getPermissionGroupByObjectId(id, objectType); // List roleId = permissionGroupByUserId.stream().map(PermissionGroupEntity::getId).collect(Collectors.toList()); // List authorizeByItem = authorizeService.getListByObjectId(roleId); list = JsonUtil.getJsonToList(permissionGroupByUserId, FlowWorkModel.class); list.forEach(t -> t.setIcon("icon-ym icon-ym-authGroup")); if (list.size() > 0) { type = 1; } else { type = 2; } map.put("list", list); map.put("type", type); return ActionResult.success(map); } /** * 验证对象数据是否存在 * * @param id * @param objectType * @return */ private boolean checkDataById(String id, String objectType) { if (PermissionConst.COMPANY.equals(objectType) || PermissionConst.DEPARTMENT.equals(objectType)) { // 获取当前菜单开启了哪些权限 OrganizeEntity entity = organizeService.getInfo(id); if (entity == null) { return true; } } else if ("position".equals(objectType)) { PositionEntity entity = positionService.getInfo(id); if (entity == null) { return true; } } else if ("user".equals(objectType)) { UserEntity entity = userService.getInfo(id); if (entity == null) { return true; } } else if ("role".equals(objectType)) { RoleEntity entity = roleService.getInfo(id); if (entity == null) { return true; } } else if ("group".equals(objectType)) { GroupEntity entity = groupService.getInfo(id); if (entity == null) { return true; } } else { return true; } return false; } @Override @GetMapping("/getInfoById") public PermissionGroupEntity getInfoById(@RequestParam("id") String id) { return permissionGroupService.info(id); } @Override @PostMapping("/getListByIds") public List getListByIds(@RequestBody List ids) { return permissionGroupService.list(ids); } }