package jnpf.permission.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; 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.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.*; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.*; @Tag(name = "操作权限", description = "Authorize") @RestController @RequiredArgsConstructor @RequestMapping("/PermissionGroup") public class PermissionGroupController { private final PermissionGroupService permissionGroupService; private final UserService userService; private final AuthorizeService authorizeService; private final OrganizeService organizeService; private final PositionService positionService; private final RoleService roleService; private final GroupService groupService; @Operation(summary = "列表") @SaCheckPermission("permission.authGroup") @GetMapping public ActionResult> list(PaginationPermissionGroup pagination) { List data = permissionGroupService.list(pagination); 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); } @Operation(summary = "权限成员") @SaCheckPermission("permission.authGroup") @Parameter(name = "id", description = "主键", required = true) @GetMapping("/PermissionMember/{id}") public ActionResult> permissionMember(@PathVariable("id") String id) { PermissionGroupEntity entity = permissionGroupService.permissionMember(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(",")); list = userService.selectedByIds(ids); listVO.setList(list); return ActionResult.success(listVO); } /** * 保存权限成员 * * @param id 主键 * @param userIdModel 用户id模型 * @return */ @Operation(summary = "保存权限成员") @SaCheckPermission("permission.authGroup") @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()); } StringJoiner stringJoiner = new StringJoiner(","); List userId = userIdModel.getIds(); if (userId.isEmpty()) { ActionResult.success(MsgCode.SU002.get()); } userId.forEach(stringJoiner::add); entity.setPermissionMember(stringJoiner.toString()); permissionGroupService.update(id, entity); //根据ids获取上级,赋予新的权限 authorizeService.setPermissionGroup(id, PermissionConst.PERMISSION_GROUP); return ActionResult.success(MsgCode.SU002.get()); } /** * 详情 * * @param id 主键 * @return */ @Operation(summary = "详情") @SaCheckPermission("permission.authGroup") @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); } @Operation(summary = "新建") @SaCheckPermission("permission.authGroup") @Parameter(name = "id", description = "模型", required = true) @PostMapping public ActionResult crete(@RequestBody PermissionGroupModel model) { PermissionGroupEntity entity = JsonUtil.getJsonToBean(model, PermissionGroupEntity.class); if (permissionGroupService.isExistByFullName(null, entity)) { return ActionResult.fail(MsgCode.EXIST001.get()); } if (StringUtil.isNotEmpty(entity.getEnCode()) && permissionGroupService.isExistByEnCode(entity.getEnCode(), null)) { return ActionResult.fail(MsgCode.EXIST002.get()); } permissionGroupService.create(entity); return ActionResult.success(MsgCode.SU001.get()); } @Operation(summary = "修改") @SaCheckPermission("permission.authGroup") @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 permissionGroupEntity = permissionGroupService.info(id); PermissionGroupEntity entity = JsonUtil.getJsonToBean(model, PermissionGroupEntity.class); if (permissionGroupService.isExistByFullName(id, entity)) { return ActionResult.fail(MsgCode.EXIST001.get()); } if (StringUtil.isNotEmpty(entity.getEnCode()) && permissionGroupService.isExistByEnCode(entity.getEnCode(), id)) { return ActionResult.fail(MsgCode.EXIST002.get()); } if (permissionGroupEntity.getEnabledMark() == 1 && entity.getEnabledMark() == 0) { userService.delCurRoleUser(null, Collections.singletonList(id)); } permissionGroupService.update(id, entity); return ActionResult.success(MsgCode.SU004.get()); } @Operation(summary = "删除") @SaCheckPermission("permission.authGroup") @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(null, Collections.singletonList(id)); permissionGroupService.delete(entity); List listByObjectId = authorizeService.getListByObjectId(id, null); authorizeService.removeByIds(listByObjectId); return ActionResult.success(MsgCode.SU003.get()); } @Operation(summary = "复制") @SaCheckPermission("permission.authGroup") @Parameter(name = "id", description = "主键", required = true) @PostMapping("/{id}/Actions/Copy") public ActionResult actionsCopy(@PathVariable("id") String id) { PermissionGroupEntity info = permissionGroupService.info(id); if (info == null) { return ActionResult.fail(MsgCode.FA003.get()); } PermissionGroupEntity entity = JsonUtil.getJsonToBean(info, PermissionGroupEntity.class); String copyNum = UUID.randomUUID().toString().substring(0, 5); String idNew = RandomUtil.uuId(); entity.setId(idNew); entity.setFullName(entity.getFullName() + ".副本" + copyNum); entity.setEnCode(entity.getEnCode() + copyNum); entity.setCreatorTime(DateUtil.getNowDate()); entity.setCreatorUserId(UserProvider.getUser().getUserId()); entity.setLastModifyTime(null); entity.setLastModifyUserId(null); entity.setPermissionMember(null);//清空授权对象 if (entity.getEnCode().length() > 50 || entity.getFullName().length() > 50) { return ActionResult.fail(MsgCode.PRI006.get()); } permissionGroupService.save(entity); //复制权限信息 List listByObjectId = authorizeService.getListByObjectId(id, null); for (AuthorizeEntity item : listByObjectId) { AuthorizeEntity itemEntity = JsonUtil.getJsonToBean(item, AuthorizeEntity.class); itemEntity.setId(RandomUtil.uuId()); itemEntity.setObjectId(idNew); itemEntity.setCreatorTime(DateUtil.getNowDate()); itemEntity.setCreatorUserId(UserProvider.getUser().getUserId()); authorizeService.save(itemEntity); } return ActionResult.success(MsgCode.SU007.get()); } /** * 获取菜单权限返回权限组 * * @param model 模型 * @return ignore */ @Operation(summary = "获取菜单权限返回权限组") @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; List permissionGroupByUserId = permissionGroupService.getPermissionGroupByObjectId(id, objectType); list = JsonUtil.getJsonToList(permissionGroupByUserId, FlowWorkModel.class); list.forEach(t -> t.setIcon("icon-ym icon-ym-authGroup")); if (!list.isEmpty()) { 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; } }