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<PermissionGroupService, PermissionGroupEntity> 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<PageListVO<PermissionGroupListVO>> list(PaginationPermissionGroup pagination) {
|
List<PermissionGroupEntity> data = new ArrayList<>();
|
List<PermissionGroupListVO> list = JsonUtil.getJsonToList(data, PermissionGroupListVO.class);
|
list.forEach(t -> {
|
String permissionMember = t.getPermissionMember();
|
if (StringUtil.isEmpty(permissionMember)) {
|
t.setPermissionMember("");
|
return;
|
}
|
List<String> 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<ListVO<FlowWorkModel>> list() {
|
List<PermissionGroupEntity> data = permissionGroupService.list(true, null);
|
List<FlowWorkModel> list = JsonUtil.getJsonToList(data, FlowWorkModel.class);
|
list.forEach(t -> t.setIcon("icon-ym icon-ym-authGroup"));
|
ListVO<FlowWorkModel> 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<ListVO<BaseInfoVo>> permissionMember(@PathVariable("id") String id) {
|
PermissionGroupEntity entity = permissionGroupService.getById(id);
|
if (entity == null) {
|
return ActionResult.fail(MsgCode.FA003.get());
|
}
|
ListVO<BaseInfoVo> listVO = new ListVO<>();
|
List<BaseInfoVo> list = new ArrayList<>();
|
if (StringUtil.isEmpty(entity.getPermissionMember())) {
|
listVO.setList(list);
|
return ActionResult.success(listVO);
|
}
|
List<String> 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<ListVO<UserIdListVo>> savePermissionMember(@PathVariable("id") String id, @RequestBody UserIdModel userIdModel) {
|
PermissionGroupEntity entity = permissionGroupService.info(id);
|
if (entity == null) {
|
return ActionResult.fail(MsgCode.FA003.get());
|
}
|
//删除退出的用户
|
List<String> oldPermission = StringUtil.isNotEmpty(entity.getPermissionMember()) ? Arrays.asList(entity.getPermissionMember().split(",")) : new ArrayList<>();
|
// List<String> permission = userIdModel.getIds();
|
// List<String> allUpdateIds = oldPermission.stream().filter(t->!permission.contains(t)).collect(Collectors.toList());
|
List<String> deleteUser = userService.getUserIdList(oldPermission);
|
//保存新的用户
|
StringJoiner stringJoiner = new StringJoiner(",");
|
List<String> userId = userIdModel.getIds();
|
userId.forEach(t -> {
|
stringJoiner.add(t);
|
});
|
entity.setPermissionMember(stringJoiner.toString());
|
// 修改前的用户
|
List<String> 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<String> 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<PermissionGroupModel> 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<String> 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<String> 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<String> 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<String> 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<AuthorizeEntity> 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<Map<String, Object>> getPermissionGroup(ViewPermissionsModel model) {
|
String objectType = model.getObjectType();
|
String id = model.getId();
|
if (checkDataById(id, objectType)) {
|
return ActionResult.fail(MsgCode.FA001.get());
|
}
|
Map<String, Object> map = new HashMap<>(2);
|
int type = 0; // 0未开启权限,1有
|
List<FlowWorkModel> list = new ArrayList<>();
|
List<PermissionGroupEntity> permissionGroupByUserId = new ArrayList<>();
|
// List<PermissionGroupEntity> permissionGroupByUserId = permissionGroupService.getPermissionGroupByObjectId(id, objectType);
|
// List<String> roleId = permissionGroupByUserId.stream().map(PermissionGroupEntity::getId).collect(Collectors.toList());
|
// List<AuthorizeEntity> 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<PermissionGroupEntity> getListByIds(@RequestBody List<String> ids) {
|
return permissionGroupService.list(ids);
|
}
|
|
}
|