commit:权限模块新增分配详情功能

This commit is contained in:
Jerry
2020-11-21 11:32:26 +08:00
parent ae7359230d
commit 5cdf9b7115
603 changed files with 7514 additions and 2249 deletions

View File

@@ -1,11 +1,10 @@
package com.orange.demo.upmsinterface.client;
import com.orange.demo.common.core.base.client.BaseFallbackFactory;
import com.orange.demo.common.core.config.FeignConfig;
import com.orange.demo.common.core.base.client.BaseClient;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.upmsinterface.dto.SysUserDto;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
@@ -71,6 +70,26 @@ public interface SysUserClient extends BaseClient<SysUserDto, Long> {
@PostMapping("/sysUser/existId")
ResponseResult<Boolean> existId(@RequestParam("userId") Long userId);
/**
* 删除主键Id关联的对象。
*
* @param userId 主键Id。
* @return 应答结果对象。
*/
@Override
@PostMapping("/sysUser/delete")
ResponseResult<Void> delete(@RequestParam("userId") Long userId);
/**
* 删除符合过滤条件的数据。
*
* @param filter 过滤对象。
* @return 应答结果对象,包含删除数量。
*/
@Override
@PostMapping("/sysUser/deleteBy")
ResponseResult<Integer> deleteBy(@RequestBody SysUserDto filter);
/**
* 获取远程主对象中符合查询条件的数据列表。
*
@@ -124,54 +143,8 @@ public interface SysUserClient extends BaseClient<SysUserDto, Long> {
@Component("UpmsSysUserClientFallbackFactory")
@Slf4j
class SysUserClientFallbackFactory implements FallbackFactory<SysUserClient>, SysUserClient {
@Override
public ResponseResult<List<SysUserDto>> listByIds(
Set<Long> userIds, Boolean withDict) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<SysUserDto> getById(
Long userId, Boolean withDict) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<Boolean> existIds(Set<Long> userIds) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<Boolean> existId(Long userId) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<List<SysUserDto>> listBy(MyQueryParam queryParam) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<SysUserDto> getBy(MyQueryParam queryParam) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<List<Map<String, Object>>> listMapBy(MyQueryParam queryParam) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<Integer> countBy(MyQueryParam queryParam) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
@Override
public ResponseResult<List<Map<String, Object>>> aggregateBy(MyAggregationParam aggregationParam) {
return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED);
}
class SysUserClientFallbackFactory
extends BaseFallbackFactory<SysUserDto, Long, SysUserClient> implements SysUserClient {
@Override
public SysUserClient create(Throwable throwable) {

View File

@@ -6,6 +6,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.common.core.annotation.MyRequestBody;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.constant.ApplicationConstant;
import com.orange.demo.common.core.object.ResponseResult;
@@ -69,16 +70,16 @@ public class LoginController {
@ApiImplicitParam(name = "loginName", defaultValue = "admin"),
@ApiImplicitParam(name = "password", defaultValue = "IP3ccke3GhH45iGHB5qP9p7iZw6xUyj28Ju10rnBiPKOI35sc%2BjI7%2FdsjOkHWMfUwGYGfz8ik31HC2Ruk%2Fhkd9f6RPULTHj7VpFdNdde2P9M4mQQnFBAiPM7VT9iW3RyCtPlJexQ3nAiA09OqG%2F0sIf1kcyveSrulxembARDbDo%3D")
})
@GetMapping("/doLogin")
@PostMapping("/doLogin")
public ResponseResult<JSONObject> doLogin(
@RequestParam String loginName, @RequestParam String password) throws Exception {
@MyRequestBody String loginName, @MyRequestBody String password) throws Exception {
if (MyCommonUtil.existBlankArgument(loginName, password)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
SysUser user = sysUserService.getSysUserByLoginName(loginName);
password = URLDecoder.decode(password, StandardCharsets.UTF_8.name());
//NOTE: 第一次使用时请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
//执行RsaUtil工具类中的main函数可以生成新的公钥和私钥。
// NOTE: 第一次使用时请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
// 执行RsaUtil工具类中的main函数可以生成新的公钥和私钥。
password = RsaUtil.decrypt(password, ApplicationConstant.PRIVATE_KEY);
if (user == null || !passwordEncoder.matches(password, user.getPassword())) {
return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD);
@@ -112,15 +113,15 @@ public class LoginController {
*/
@PostMapping("/changePassword")
public ResponseResult<Void> changePassword(
@RequestParam String oldPass, @RequestParam String newPass) throws Exception {
@MyRequestBody String oldPass, @MyRequestBody String newPass) throws Exception {
if (MyCommonUtil.existBlankArgument(oldPass, oldPass)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
TokenData tokenData = TokenData.takeFromRequest();
SysUser user = sysUserService.getById(tokenData.getUserId());
oldPass = URLDecoder.decode(oldPass, StandardCharsets.UTF_8.name());
//NOTE: 第一次使用时请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
//执行RsaUtil工具类中的main函数可以生成新的公钥和私钥。
// NOTE: 第一次使用时请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
// 执行RsaUtil工具类中的main函数可以生成新的公钥和私钥。
oldPass = RsaUtil.decrypt(oldPass, ApplicationConstant.PRIVATE_KEY);
if (user == null || !passwordEncoder.matches(oldPass, user.getPassword())) {
return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD);

View File

@@ -50,12 +50,12 @@ public class SysMenuController {
@MyRequestBody("sysMenu") SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class);
CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> permCodeIdSet = null;
if (result.getData() != null) {
@@ -78,7 +78,7 @@ public class SysMenuController {
@MyRequestBody("sysMenu") SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysMenu originalSysMenu = sysMenuService.getById(sysMenuDto.getMenuId());
if (originalSysMenu == null) {
@@ -88,7 +88,7 @@ public class SysMenuController {
SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class);
CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> permCodeIdSet = null;
if (result.getData() != null) {
@@ -155,13 +155,32 @@ public class SysMenuController {
}
/**
* 列出与指定菜单关联的权限字和权限资源,便于管理员排查配置中的错误
* 查询菜单的权限资源地址列表。同时返回详细的分配路径
*
* @param menuId 菜单Id。
* @return 与菜单关联的权限字和权限资源列表
* @param url 权限资源地址过滤条件
* @return 应答对象,包含从菜单到权限资源的权限分配路径信息的查询结果列表。
*/
@GetMapping("/listMenuPerm")
public ResponseResult<List<Map<String, Object>>> listMenuPerm(@RequestParam Long menuId) {
return ResponseResult.success(sysPermCodeService.getPermCodeListByMenuId(menuId));
@GetMapping("/listSysPermWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysPermWithDetail(Long menuId, String url) {
if (MyCommonUtil.isBlankOrNull(menuId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return ResponseResult.success(sysMenuService.getSysPermListWithDetail(menuId, url));
}
/**
* 查询菜单的用户列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param loginName 登录名。
* @return 应答对象,包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
@GetMapping("/listSysUserWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysUserWithDetail(Long menuId, String loginName) {
if (MyCommonUtil.isBlankOrNull(menuId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return ResponseResult.success(sysMenuService.getSysUserListWithDetail(menuId, loginName));
}
}

View File

@@ -1,6 +1,5 @@
package com.orange.demo.upmsservice.controller;
import com.github.pagehelper.page.PageMethod;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
@@ -8,7 +7,6 @@ import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.util.MyPageUtil;
import com.orange.demo.common.core.annotation.MyRequestBody;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.upmsinterface.dto.SysPermCodeDto;
@@ -50,12 +48,12 @@ public class SysPermCodeController {
@MyRequestBody("sysPermCode") SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED);
}
SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class);
CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> permIdSet = null;
if (result.getData() != null) {
@@ -78,7 +76,7 @@ public class SysPermCodeController {
@MyRequestBody("sysPermCode") SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCodeDto.getPermCodeId());
if (originalSysPermCode == null) {
@@ -88,7 +86,7 @@ public class SysPermCodeController {
SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class);
CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> permIdSet = null;
if (result.getData() != null) {
@@ -162,28 +160,32 @@ public class SysPermCodeController {
}
/**
* 查看用户关联的权限字列表
* 查询权限字的用户列表。同时返回详细的分配路径
*
* @param loginName 精确匹配用户登录名
* @param permCode 模糊匹配的权限字名LIKE %permCode%
* @param pageParam 分页对象
* @return 应答结果对象,包含该用户的全部权限资源列表。
* @param permCodeId 权限字Id
* @param loginName 登录名
* @return 应答对象。包含从权限字到用户的完整权限分配路径信息的查询结果列表
*/
@PostMapping("/listAllPermCodesByUserFilter")
public ResponseResult<MyPageData<SysPermCodeDto>> listAllPermCodesByUserFilter(
@MyRequestBody String loginName,
@MyRequestBody String permCode,
@MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(loginName)) {
@GetMapping("/listSysUserWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysUserWithDetail(Long permCodeId, String loginName) {
if (MyCommonUtil.isBlankOrNull(permCodeId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
return ResponseResult.success(sysPermCodeService.getSysUserListWithDetail(permCodeId, loginName));
}
/**
* 查询权限字的角色列表。同时返回详细的分配路径。
*
* @param permCodeId 权限字Id。
* @param roleName 角色名。
* @return 应答对象。包含从权限字到角色的权限分配路径信息的查询结果列表。
*/
@GetMapping("/listSysRoleWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysRoleWithDetail(Long permCodeId, String roleName) {
if (MyCommonUtil.isBlankOrNull(permCodeId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
List<SysPermCode> permCodeList =
sysPermCodeService.getUserPermCodeListByFilter(loginName, permCode);
MyPageData<SysPermCodeDto> pageData = MyPageUtil.makeResponseData(
MyModelUtil.copyCollectionTo(permCodeList, SysPermCodeDto.class));
return ResponseResult.success(pageData);
return ResponseResult.success(sysPermCodeService.getSysRoleListWithDetail(permCodeId, roleName));
}
}

View File

@@ -50,12 +50,12 @@ public class SysPermController {
public ResponseResult<Long> add(@MyRequestBody("sysPerm") SysPermDto sysPermDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class);
CallResult result = sysPermService.verifyRelatedData(sysPerm, null);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
sysPerm = sysPermService.saveNew(sysPerm);
return ResponseResult.success(sysPerm.getPermId());
@@ -71,7 +71,7 @@ public class SysPermController {
public ResponseResult<Void> update(@MyRequestBody("sysPerm") SysPermDto sysPermDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysPerm originalPerm = sysPermService.getById(sysPermDto.getPermId());
if (originalPerm == null) {
@@ -81,7 +81,7 @@ public class SysPermController {
SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class);
CallResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
if (result.getData() != null) {
SysPermModule permModule = (SysPermModule) result.getData().get("permModule");
@@ -152,58 +152,47 @@ public class SysPermController {
}
/**
* 查看用户关联的权限资源列表
* 查询权限资源地址的用户列表。同时返回详细的分配路径
*
* @param loginName 精确匹配用户登录名
* @param moduleId 精确匹配权限模块Id
* @param url 模糊匹配的url过滤条件
* @param pageParam 分页对象。
* @return 应答结果对象,包含该用户的全部权限资源列表。
* @param permId 权限资源Id
* @param loginName 登录名
* @return 应答对象。包含从权限资源到用户的完整权限分配路径信息的查询结果列表
*/
@PostMapping("/listAllPermsByUserFilter")
public ResponseResult<MyPageData<Map<String, Object>>> listAllPermsByUserFilter(
@MyRequestBody String loginName,
@MyRequestBody Long moduleId,
@MyRequestBody String url,
@MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(loginName)) {
@GetMapping("/listSysUserWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysUserWithDetail(Long permId, String loginName) {
if (MyCommonUtil.isBlankOrNull(permId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<Map<String, Object>> userPermMapList =
sysPermService.getUserPermListByFilter(loginName, moduleId, url);
return ResponseResult.success(MyPageUtil.makeResponseData(userPermMapList));
return ResponseResult.success(sysPermService.getSysUserListWithDetail(permId, loginName));
}
/**
* 查看拥有指定权限资源的所有用户数据列表
* 查询权限资源地址的角色列表。同时返回详细的分配路径
*
* @param permId 指定权限资源主键Id。
* @return 应答结果对象,包含用户数据列表
* @param permId 权限资源Id。
* @param roleName 角色名
* @return 应答对象。包含从权限资源到角色的权限分配路径信息的查询结果列表。
*/
@PostMapping("/listAllUsers")
public ResponseResult<List<Map<String, Object>>> listAllUsers(@MyRequestBody Long permId) {
if (MyCommonUtil.existBlankArgument(permId)) {
@GetMapping("/listSysRoleWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysRoleWithDetail(Long permId, String roleName) {
if (MyCommonUtil.isBlankOrNull(permId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
List<Map<String, Object>> permUserMapList = sysPermService.getPermUserListById(permId);
return ResponseResult.success(permUserMapList);
return ResponseResult.success(sysPermService.getSysRoleListWithDetail(permId, roleName));
}
/**
* 查看拥有指定权限资源的所有角色数据列表
* 查询权限资源地址的菜单列表。同时返回详细的分配路径
*
* @param permId 指定权限资源主键Id。
* @return 应答结果对象,包含角色数据列表
* @param permId 权限资源Id。
* @param menuName 菜单名
* @return 应答对象。包含从权限资源到菜单的权限分配路径信息的查询结果列表。
*/
@PostMapping("/listAllRoles")
public ResponseResult<List<Map<String, Object>>> listAllRoles(@MyRequestBody Long permId) {
if (MyCommonUtil.existBlankArgument(permId)) {
@GetMapping("/listSysMenuWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysMenuWithDetail(Long permId, String menuName) {
if (MyCommonUtil.isBlankOrNull(permId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
List<Map<String, Object>> permRoleMapList = sysPermService.getPermRoleListById(permId);
return ResponseResult.success(permRoleMapList);
}
return ResponseResult.success(sysPermService.getSysMenuListWithDetail(permId, menuName));
}
}

View File

@@ -49,7 +49,7 @@ public class SysPermModuleController {
public ResponseResult<Long> add(@MyRequestBody("sysPermModule") SysPermModuleDto sysPermModuleDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class);
if (sysPermModule.getParentId() != null
@@ -71,7 +71,7 @@ public class SysPermModuleController {
public ResponseResult<Void> update(@MyRequestBody("sysPermModule") SysPermModuleDto sysPermModuleDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class);
SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId());

View File

@@ -58,12 +58,12 @@ public class SysRoleController {
@MyRequestBody("sysRole") SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class);
CallResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> menuIdSet = null;
if (result.getData() != null) {
@@ -87,7 +87,7 @@ public class SysRoleController {
@MyRequestBody("sysRole") SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysRole originalSysRole = sysRoleService.getById(sysRoleDto.getRoleId());
if (originalSysRole == null) {
@@ -97,7 +97,7 @@ public class SysRoleController {
SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class);
CallResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> menuIdSet = null;
if (result.getData() != null) {
@@ -291,56 +291,34 @@ public class SysRoleController {
}
return ResponseResult.success();
}
/**
* 通过权限字Id获取拥有改权限的所有角色
* 开发人员调试用接口。
* 查询角色的权限资源地址列表。同时返回详细的分配路径
*
* @param permCodeId 查询的权限字Id。
* @param pageParam 分页对象
* @return 符合条件的角色列表。
* @param roleId 角色Id。
* @param url url过滤条件
* @return 应答对象,包含从角色到权限资源的完整权限分配路径信息的查询结果列表。
*/
@PostMapping("/listAllRolesByPermCode")
public ResponseResult<MyPageData<SysRoleDto>> listAllRolesByPermCode(
@MyRequestBody Long permCodeId, @MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(permCodeId)) {
@GetMapping("/listSysPermWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysPermWithDetail(Long roleId, String url) {
if (MyCommonUtil.isBlankOrNull(roleId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<SysRole> roleList = sysRoleService.getSysRoleListByPermCodeId(permCodeId);
List<SysRoleDto> roleDtoList = MyModelUtil.copyCollectionTo(roleList, SysRoleDto.class);
long totalCount = 0L;
if (roleList instanceof Page) {
totalCount = ((Page<SysRole>) roleList).getTotal();
}
return ResponseResult.success(MyPageUtil.makeResponseData(roleDtoList, totalCount));
return ResponseResult.success(sysRoleService.getSysPermListWithDetail(roleId, url));
}
/**
* 通过权限资源url模糊搜索拥有改权限的所有角色
* 开发人员调试用接口。
* 查询角色的权限字列表。同时返回详细的分配路径
*
* @param url 用于模糊搜索的url
* @param pageParam 分页对象
* @return 符合条件的角色列表。
* @param roleId 角色Id
* @param permCode 权限字名称过滤条件
* @return 应答对象,包含从角色到权限字的权限分配路径信息的查询结果列表。
*/
@PostMapping("/listAllRolesByPerm")
public ResponseResult<MyPageData<SysRoleDto>> listAllRolesByPerm(
@MyRequestBody String url, @MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(url)) {
@GetMapping("/listSysPermCodeWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysPermCodeWithDetail(Long roleId, String permCode) {
if (MyCommonUtil.isBlankOrNull(roleId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<SysRole> roleList = sysRoleService.getSysRoleListByPerm(url);
List<SysRoleDto> roleDtoList = MyModelUtil.copyCollectionTo(roleList, SysRoleDto.class);
long totalCount = 0L;
if (roleList instanceof Page) {
totalCount = ((Page<SysRole>) roleList).getTotal();
}
return ResponseResult.success(MyPageUtil.makeResponseData(roleDtoList, totalCount));
return ResponseResult.success(sysRoleService.getSysPermCodeListWithDetail(roleId, permCode));
}
}

View File

@@ -63,12 +63,12 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
@MyRequestBody("sysUser") SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, AddGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysUser sysUser = SysUser.INSTANCE.toModel(sysUserDto);
CallResult result = sysUserService.verifyRelatedData(sysUser, null, roleIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
sysUserService.saveNew(sysUser, roleIdSet);
@@ -91,7 +91,7 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
@MyRequestBody("sysUser") SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysUser originalUser = sysUserService.getById(sysUserDto.getUserId());
if (originalUser == null) {
@@ -100,7 +100,7 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
SysUser sysUser = SysUser.INSTANCE.toModel(sysUserDto);
CallResult result = sysUserService.verifyRelatedData(sysUser, originalUser, roleIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
}
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
if (!sysUserService.update(sysUser, originalUser, roleIdSet)) {
@@ -141,7 +141,7 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
// 验证关联Id的数据合法性
SysUser originalSysUser = sysUserService.getById(userId);
if (originalSysUser == null) {
//NOTE: 修改下面方括号中的话述
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
@@ -203,6 +203,51 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
return ResponseResult.success(sysUserDto);
}
/**
* 查询用户的权限资源地址列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param url url过滤条件。
* @return 应答对象,包含从用户到权限资源的完整权限分配路径信息的查询结果列表。
*/
@GetMapping("/listSysPermWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysPermWithDetail(Long userId, String url) {
if (MyCommonUtil.isBlankOrNull(userId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return ResponseResult.success(sysUserService.getSysPermListWithDetail(userId, url));
}
/**
* 查询用户的权限字列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param permCode 权限字名称过滤条件。
* @return 应答对象,包含从用户到权限字的权限分配路径信息的查询结果列表。
*/
@GetMapping("/listSysPermCodeWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysPermCodeWithDetail(Long userId, String permCode) {
if (MyCommonUtil.isBlankOrNull(userId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return ResponseResult.success(sysUserService.getSysPermCodeListWithDetail(userId, permCode));
}
/**
* 查询用户的菜单列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param menuName 菜单名称过滤条件。
* @return 应答对象,包含从用户到菜单的权限分配路径信息的查询结果列表。
*/
@GetMapping("/listSysMenuWithDetail")
public ResponseResult<List<Map<String, Object>>> listSysMenuWithDetail(Long userId, String menuName) {
if (MyCommonUtil.isBlankOrNull(userId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return ResponseResult.success(sysUserService.getSysMenuListWithDetail(userId, menuName));
}
/**
* 根据主键Id集合获取数据对象集合。仅限于微服务间远程接口调用。
*
@@ -255,6 +300,18 @@ public class SysUserController extends BaseController<SysUser, SysUserDto, Long>
return super.baseExistId(userId);
}
/**
* 删除符合过滤条件的数据。
*
* @param filter 过滤对象。
* @return 删除数量。
*/
@ApiOperation(hidden = true, value = "deleteBy")
@PostMapping("/deleteBy")
public ResponseResult<Integer> deleteBy(@RequestBody SysUserDto filter) throws Exception {
return super.baseDeleteBy(filter, SysUser.INSTANCE);
}
/**
* 复杂的查询调用,包括(in list)过滤,对象条件过滤,分组和排序等。主要用于微服务间远程过程调用。
*

View File

@@ -2,8 +2,9 @@ package com.orange.demo.upmsservice.dao;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.upmsservice.model.SysMenu;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.*;
/**
* 菜单数据访问操作接口。
@@ -19,5 +20,25 @@ public interface SysMenuMapper extends BaseDaoMapper<SysMenu> {
* @param userId 登录用户。
* @return 菜单列表。
*/
List<SysMenu> getMenuListByUserId(Long userId);
List<SysMenu> getMenuListByUserId(@Param("userId") Long userId);
/**
* 查询菜单的权限资源地址列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param url 权限资源地址过滤条件。
* @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysPermListWithDetail(
@Param("menuId") Long menuId, @Param("url") String url);
/**
* 查询菜单的用户列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param loginName 登录名。
* @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysUserListWithDetail(
@Param("menuId") Long menuId, @Param("loginName") String loginName);
}

View File

@@ -21,23 +21,25 @@ public interface SysPermCodeMapper extends BaseDaoMapper<SysPermCode> {
* @param userId 用户Id。
* @return 该用户的权限字列表。
*/
List<String> getPermCodeListByUserId(Long userId);
List<String> getPermCodeListByUserId(@Param("userId") Long userId);
/**
* 获取该菜单的权限字和关联的权限资源列表
* 查询权限字的用户列表。同时返回详细的分配路径
*
* @param menuId 菜单Id。
* @return 权限字和关联的权限资源列表
* @param permCodeId 权限字Id。
* @param loginName 登录名
* @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getPermCodeListByMenuId(Long menuId);
List<Map<String, Object>> getSysUserListWithDetail(
@Param("permCodeId") Long permCodeId, @Param("loginName") String loginName);
/**
* 获取指定用户的权限字列表
* 查询权限字的角色列表。同时返回详细的分配路径
*
* @param loginName 精确匹配用户登录名
* @param permCode 模糊匹配的权限字名LIKE %permCode%
* @return 权限字列表。
* @param permCodeId 权限字Id
* @param roleName 角色名
* @return 包含从权限字到角色的权限分配路径信息的查询结果列表。
*/
List<SysPermCode> getUserPermCodeListByFilter(
@Param("loginName") String loginName, @Param("permCode") String permCode);
List<Map<String, Object>> getSysRoleListWithDetail(
@Param("permCodeId") Long permCodeId, @Param("roleName") String roleName);
}

View File

@@ -23,17 +23,6 @@ public interface SysPermMapper extends BaseDaoMapper<SysPerm> {
*/
List<SysPerm> getPermListByUserId(@Param("userId") Long userId);
/**
* 获取指定用户Id的权限列表。
*
* @param loginName 精确匹配用户登录名。
* @param moduleId 精确匹配权限模块Id。
* @param url 权限的url过滤条件LIKE %url%。
* @return 权限列表。
*/
List<Map<String, Object>> getUserPermListByFilter(
@Param("loginName") String loginName, @Param("moduleId") Long moduleId, @Param("url") String url);
/**
* 根据关联权限字主键Id获取权限资源数据列表。
*
@@ -44,18 +33,32 @@ public interface SysPermMapper extends BaseDaoMapper<SysPerm> {
List<SysPerm> getPermListByPermCodeId(@Param("permCodeId") Long permCodeId, @Param("orderBy") String orderBy);
/**
* 获取指定权限的用户列表
* 查询权限资源地址的用户列表。同时返回详细的分配路径
*
* @param permId 指定权限
* @return 用户列表
* @param permId 权限资源Id
* @param loginName 登录名
* @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getPermUserListById(@Param("permId") Long permId);
List<Map<String, Object>> getSysUserListWithDetail(
@Param("permId") Long permId, @Param("loginName") String loginName);
/**
* 获取指定权限的角色列表
* 查询权限资源地址的角色列表。同时返回详细的分配路径
*
* @param permId 指定权限
* @return 角色列表
* @param permId 权限资源Id
* @param roleName 角色
* @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getPermRoleListById(@Param("permId") Long permId);
List<Map<String, Object>> getSysRoleListWithDetail(
@Param("permId") Long permId, @Param("roleName") String roleName);
/**
* 查询权限资源地址的菜单列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param menuName 菜单名。
* @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysMenuListWithDetail(
@Param("permId") Long permId, @Param("menuName") String menuName);
}

View File

@@ -4,7 +4,7 @@ import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.upmsservice.model.SysRole;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.*;
/**
* 角色数据访问操作接口。
@@ -24,18 +24,22 @@ public interface SysRoleMapper extends BaseDaoMapper<SysRole> {
List<SysRole> getSysRoleList(@Param("sysRoleFilter") SysRole sysRoleFilter, @Param("orderBy") String orderBy);
/**
* 根据权限字Id获取关联的角色列表
* 查询角色的权限资源地址列表。同时返回详细的分配路径
*
* @param permCodeId 权限字Id。
* @return 关联的角色列表
* @param roleId 角色Id。
* @param url url过滤条件
* @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。
*/
List<SysRole> getSysRoleListByPermCodeId(@Param("permCodeId") Long permCodeId);
List<Map<String, Object>> getSysPermListWithDetail(
@Param("roleId") Long roleId, @Param("url") String url);
/**
* 根据url模糊查询关联的角色列表
* 查询角色的权限字列表。同时返回详细的分配路径
*
* @param url url片段
* @return 关联的角色列表
* @param roleId 角色Id
* @param permCode 权限字名称过滤条件
* @return 包含从角色到权限字的权限分配路径信息的查询结果列表。
*/
List<SysRole> getSysRoleListByPerm(@Param("url") String url);
List<Map<String, Object>> getSysPermCodeListWithDetail(
@Param("roleId") Long roleId, @Param("permCode") String permCode);
}

View File

@@ -67,4 +67,34 @@ public interface SysUserMapper extends BaseDaoMapper<SysUser> {
@Param("roleId") Long roleId,
@Param("sysUserFilter") SysUser sysUserFilter,
@Param("orderBy") String orderBy);
/**
* 查询用户的权限资源地址列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param url url过滤条件。
* @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysPermListWithDetail(
@Param("userId") Long userId, @Param("url") String url);
/**
* 查询用户的权限字列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param permCode 权限字名称过滤条件。
* @return 包含从用户到权限字的权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysPermCodeListWithDetail(
@Param("userId") Long userId, @Param("permCode") String permCode);
/**
* 查询用户的菜单列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param menuName 菜单名称过滤条件。
* @return 包含从用户到菜单的权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysMenuListWithDetail(
@Param("userId") Long userId, @Param("menuName") String menuName);
}

View File

@@ -32,4 +32,57 @@
</where>
ORDER BY m.show_order
</select>
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysPermListWithDetail" resultType="map">
SELECT
pc.perm_code_id permCodeId,
pc.show_name showName,
pc.perm_code_type permCodeType,
pc.perm_code permCode,
p.perm_id permId,
p.perm_name permName,
p.url
FROM
zz_sys_menu_perm_code mpc,
zz_sys_perm_code_perm pcp,
zz_sys_perm_code pc,
zz_sys_perm p
<where>
AND mpc.menu_id = #{menuId}
AND mpc.perm_code_id = pc.perm_code_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
<if test="url != null and url != ''">
AND p.url = #{url}
</if>
</where>
ORDER BY
pc.perm_code_id, p.url
</select>
<select id="getSysUserListWithDetail" resultType="map">
SELECT
u.user_id userId,
u.login_name loginName,
u.show_name showName,
r.role_id roleId,
r.role_name roleName
FROM
zz_sys_role_menu rm,
zz_sys_role r,
zz_sys_user_role ur,
zz_sys_user u
<where>
AND rm.menu_id = #{menuId}
AND rm.role_id = r.role_id
AND rm.role_id = ur.role_id
AND ur.user_id = u.user_id
<if test="loginName != null and loginName != ''">
AND u.login_name = #{loginName}
</if>
</where>
ORDER BY
u.user_id, r.role_id
</select>
</mapper>

View File

@@ -32,53 +32,61 @@
</where>
</select>
<select id="getUserPermCodeListByFilter" resultMap="BaseResultMap">
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysUserListWithDetail" resultType="map">
SELECT
DISTINCT pc.*
u.user_id userId,
u.login_name loginName,
u.show_name showName,
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType
FROM
zz_sys_user u,
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc
zz_sys_menu m,
zz_sys_role_menu rm,
zz_sys_role r,
zz_sys_user_role ur,
zz_sys_user u
<where>
AND u.login_name = #{loginName}
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND u.user_id = ur.user_id
AND ur.role_id = rm.role_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
AND pc.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
<if test="permCode != null and permCode != ''">
<bind name= "safePermCode" value= "'%' + permCode + '%'" />
AND pc.perm_code LIKE #{safePermCode}
AND mpc.perm_code_id = #{permCodeId}
AND mpc.menu_id = m.menu_id
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
AND rm.role_id = ur.role_id
AND ur.user_id = u.user_id
<if test="loginName != null and loginName != ''">
AND u.login_name = #{loginName}
</if>
</where>
ORDER BY pc.create_time
ORDER BY
u.user_id, r.role_id, m.menu_id
</select>
<select id="getPermCodeListByMenuId" resultType="map">
<select id="getSysRoleListWithDetail" resultType="map">
SELECT
pc.perm_code_id permCodeId,
pc.show_name showName,
pc.perm_code_type permCodeType,
pc.perm_code permCode,
p.perm_id permId,
p.perm_name permName,
p.url
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType
FROM
zz_sys_menu_perm_code mpc,
zz_sys_perm_code_perm pcp,
zz_sys_perm_code pc,
zz_sys_perm p
zz_sys_menu m,
zz_sys_role_menu rm,
zz_sys_role r
<where>
AND mpc.menu_id = #{menuId}
AND mpc.perm_code_id = pc.perm_code_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
AND pc.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND mpc.perm_code_id = #{permCodeId}
AND mpc.menu_id = m.menu_id
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
<if test="roleName != null and roleName != ''">
AND r.role_name = #{roleName}
</if>
</where>
ORDER BY pc.perm_code_id, p.show_order
ORDER BY
r.role_id, m.menu_id
</select>
</mapper>
</mapper>

View File

@@ -33,44 +33,6 @@
</where>
</select>
<select id="getUserPermListByFilter" resultType="map">
SELECT
pm.module_id moduleId,
pm.module_name moduleName,
p.perm_id permId,
p.perm_name permName,
p.create_time createTime,
p.url
FROM
zz_sys_user u,
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code_perm pcp,
zz_sys_perm p,
zz_sys_perm_module pm
<where>
AND u.login_name = #{loginName}
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND u.user_id = ur.user_id
AND ur.role_id = rm.role_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
AND p.module_id = pm.module_id
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND pm.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
<if test="url != null and url != ''">
<bind name= "safeUrl" value= "'%' + url + '%'" />
AND p.url LIKE #{safeUrl}
</if>
<if test="moduleId != null">
AND p.module_id = #{moduleId}
</if>
</where>
ORDER BY pm.module_id, p.create_time
</select>
<select id="getPermListByPermCodeId" resultMap="BaseResultMap">
SELECT
p.*
@@ -87,48 +49,101 @@
</if>
</select>
<select id="getPermUserListById" resultType="map">
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysUserListWithDetail" resultType="map">
SELECT
u.user_id,
u.login_name
u.show_name
u.user_id userId,
u.login_name loginName,
u.show_name showName,
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType
FROM
zz_sys_perm p,
zz_sys_perm_code_perm pcp,
zz_sys_perm_code pc,
zz_sys_menu_perm_code mpc,
zz_sys_menu m,
zz_sys_role_menu rm,
zz_sys_role r,
zz_sys_user_role ur,
zz_sys_user u
<where>
AND p.perm_id = #{permId}
AND p.perm_id = pcp.perm_id
AND pcp.perm_id = #{permId}
AND pcp.perm_code_id = pc.perm_code_id
AND pcp.perm_code_id = mpc.perm_code_id
AND mpc.menu_id = m.menu_id
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
AND rm.role_id = ur.role_id
AND ur.user_id = u.user_id
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
<if test="loginName != null and loginName != ''">
AND u.login_name = #{loginName}
</if>
</where>
ORDER BY
u.user_id, r.role_id, m.menu_id, pc.perm_code_id
</select>
<select id="getPermRoleListById" resultType="map">
<select id="getSysRoleListWithDetail" resultType="map">
SELECT
r.role_id,
r.role_name
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType
FROM
zz_sys_perm p,
zz_sys_perm_code_perm pcp,
zz_sys_perm_code pc,
zz_sys_menu_perm_code mpc,
zz_sys_menu m,
zz_sys_role_menu rm,
zz_sys_role r
<where>
AND p.perm_id = #{permId}
AND p.perm_id = pcp.perm_id
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND r.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND pcp.perm_id = #{permId}
AND pcp.perm_code_id = pc.perm_code_id
AND pcp.perm_code_id = mpc.perm_code_id
AND mpc.menu_id = m.menu_id
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
<if test="roleName != null and roleName != ''">
AND r.role_name = #{roleName}
</if>
</where>
ORDER BY
r.role_id, m.menu_id, pc.perm_code_id
</select>
<select id="getSysMenuListWithDetail" resultType="map">
SELECT
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType
FROM
zz_sys_perm_code_perm pcp,
zz_sys_perm_code pc,
zz_sys_menu_perm_code mpc,
zz_sys_menu m
<where>
AND pcp.perm_id = #{permId}
AND pcp.perm_code_id = pc.perm_code_id
AND pcp.perm_code_id = mpc.perm_code_id
AND mpc.menu_id = m.menu_id
<if test="menuName != null and menuName != ''">
AND m.menu_name = #{menuName}
</if>
</where>
ORDER BY
m.menu_id, pc.perm_code_id
</select>
</mapper>

View File

@@ -26,42 +26,62 @@
ORDER BY ${orderBy}
</if>
</select>
<select id="getSysRoleListByPermCodeId" resultMap="BaseResultMap">
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysPermListWithDetail" resultType="map">
SELECT
DISTINCT r.*
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType,
p.url
FROM
my_sys_role r,
my_sys_role_menu rm,
my_sys_menu_perm_code mpc
zz_sys_role_menu rm,
zz_sys_menu m,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc,
zz_sys_perm_code_perm pcp,
zz_sys_perm p
<where>
mpc.perm_code_id = #{permCodeId}
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
AND r.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND rm.role_id = #{roleId}
AND rm.menu_id = m.menu_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
<if test="url != null and url != ''">
AND p.url = #{url}
</if>
</where>
ORDER BY r.create_time
ORDER BY
m.menu_id, pc.perm_code_id, p.url
</select>
<select id="getSysRoleListByPerm" resultMap="BaseResultMap">
<select id="getSysPermCodeListWithDetail" resultType="map">
SELECT
DISTINCT r.*
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType
FROM
my_sys_role r,
my_sys_role_menu rm,
my_sys_menu_perm_code mpc,
my_sys_perm_code_perm pcp,
my_sys_perm p
zz_sys_role_menu rm,
zz_sys_menu m,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc
<where>
<bind name= "safeUrl" value= "'%' + url + '%'"/>
p.url LIKE #{safeUrl}
AND p.perm_id = pcp.perm_id
AND pcp.perm_code_id = mpc.perm_code_id
AND mpc.menu_id = rm.menu_id
AND rm.role_id = r.role_id
AND r.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND rm.role_id = #{roleId}
AND rm.menu_id = m.menu_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
<if test="permCode != null and permCode != ''">
AND pc.perm_code = #{permCode}
</if>
</where>
ORDER BY r.create_time
ORDER BY
m.menu_id, pc.perm_code_id
</select>
</mapper>

View File

@@ -95,4 +95,99 @@
ORDER BY ${orderBy}
</if>
</select>
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysPermListWithDetail" resultType="map">
SELECT
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType,
p.url
FROM
zz_sys_user_role ur,
zz_sys_role r,
zz_sys_role_menu rm,
zz_sys_menu m,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc,
zz_sys_perm_code_perm pcp,
zz_sys_perm p
<where>
AND ur.user_id = #{userId}
AND ur.role_id = r.role_id
AND ur.role_id = rm.role_id
AND rm.menu_id = m.menu_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
<if test="url != null and url != ''">
AND p.url = #{url}
</if>
</where>
ORDER BY
r.role_id, m.menu_id, pc.perm_code_id, p.url
</select>
<select id="getSysPermCodeListWithDetail" resultType="map">
SELECT
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType,
pc.perm_code_id permCodeId,
pc.perm_code permCode,
pc.perm_code_type permCodeType
FROM
zz_sys_user_role ur,
zz_sys_role r,
zz_sys_role_menu rm,
zz_sys_menu m,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc
<where>
AND ur.user_id = #{userId}
AND ur.role_id = r.role_id
AND ur.role_id = rm.role_id
AND rm.menu_id = m.menu_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
<if test="permCode != null and permCode != ''">
AND pc.perm_code = #{permCode}
</if>
</where>
ORDER BY
r.role_id, m.menu_id, pc.perm_code_id
</select>
<select id="getSysMenuListWithDetail" resultType="map">
SELECT
r.role_id roleId,
r.role_name roleName,
m.menu_id menuId,
m.menu_name menuName,
m.menu_type menuType
FROM
zz_sys_user_role ur,
zz_sys_role r,
zz_sys_role_menu rm,
zz_sys_menu m
<where>
AND ur.user_id = #{userId}
AND ur.role_id = r.role_id
AND ur.role_id = rm.role_id
AND rm.menu_id = m.menu_id
<if test="menuName != null and menuName != ''">
AND m.menu_name = #{menuName}
</if>
</where>
ORDER BY
r.role_id, m.menu_id
</select>
</mapper>

View File

@@ -205,6 +205,28 @@ public class SysMenuService extends BaseService<SysMenu, SysMenuDto, Long> {
return CallResult.ok(jsonObject);
}
/**
* 查询菜单的权限资源地址列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param url 权限资源地址过滤条件。
* @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long menuId, String url) {
return sysMenuMapper.getSysPermListWithDetail(menuId, url);
}
/**
* 查询菜单的用户列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param loginName 登录名。
* @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long menuId, String loginName) {
return sysMenuMapper.getSysUserListWithDetail(menuId, loginName);
}
private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) {
// 判断父节点是否存在
SysMenu parentSysMenu = getById(sysMenu.getParentId());

View File

@@ -61,16 +61,6 @@ public class SysPermCodeService extends BaseService<SysPermCode, SysPermCodeDto,
return sysPermCodeMapper.getPermCodeListByUserId(userId);
}
/**
* 获取该菜单的权限字,及其权限字关联的权限资源列表。
*
* @param menuId 菜单Id。
* @return 关联了权限资源的权限字列表。
*/
public List<Map<String, Object>> getPermCodeListByMenuId(Long menuId) {
return sysPermCodeMapper.getPermCodeListByMenuId(menuId);
}
/**
* 保存新增的权限字对象。
*
@@ -152,17 +142,6 @@ public class SysPermCodeService extends BaseService<SysPermCode, SysPermCodeDto,
return true;
}
/**
* 获取指定用户的权限字列表。
*
* @param loginName 精确匹配用户登录名。
* @param permCode 模糊匹配的权限字名LIKE %permCode%。
* @return 权限字列表。
*/
public List<SysPermCode> getUserPermCodeListByFilter(String loginName, String permCode) {
return sysPermCodeMapper.getUserPermCodeListByFilter(loginName, permCode);
}
/**
* 判断当前权限字是否存在下级权限字对象。
*
@@ -202,4 +181,26 @@ public class SysPermCodeService extends BaseService<SysPermCode, SysPermCodeDto,
}
return CallResult.ok(jsonObject);
}
/**
* 查询权限字的用户列表。同时返回详细的分配路径。
*
* @param permCodeId 权限字Id。
* @param loginName 登录名。
* @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long permCodeId, String loginName) {
return sysPermCodeMapper.getSysUserListWithDetail(permCodeId, loginName);
}
/**
* 查询权限字的角色列表。同时返回详细的分配路径。
*
* @param permCodeId 权限字Id。
* @param roleName 角色名。
* @return 包含从权限字到角色的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysRoleListWithDetail(Long permCodeId, String roleName) {
return sysPermCodeMapper.getSysRoleListWithDetail(permCodeId, roleName);
}
}

View File

@@ -94,9 +94,9 @@ public class SysPermService extends BaseService<SysPerm, SysPermDto, Long> {
if (sysPermMapper.updateByPrimaryKeySelective(perm) != 1) {
return false;
}
Example e = new Example(SysPermCodePerm.class);
e.createCriteria().andEqualTo("permId", permId);
sysPermCodePermMapper.deleteByExample(e);
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermId(permId);
sysPermCodePermMapper.delete(permCodePerm);
return true;
}
@@ -144,38 +144,6 @@ public class SysPermService extends BaseService<SysPerm, SysPermDto, Long> {
return sysPermMapper.getPermListByUserId(userId);
}
/**
* 获取指定用户的用户权限关联列表。
*
* @param loginName 精确匹配用户登录名。
* @param moduleId 精确匹配权限模块Id。
* @param url 模糊匹配的url过滤条件。
* @return 用户权限关联列表。
*/
public List<Map<String, Object>> getUserPermListByFilter(String loginName, Long moduleId, String url) {
return sysPermMapper.getUserPermListByFilter(loginName, moduleId, url);
}
/**
* 获取指定权限资源的权限用户关联数据列表。
*
* @param permId 权限资源主键Id。
* @return 用户和权限资源关联列表。
*/
public List<Map<String, Object>> getPermUserListById(Long permId) {
return sysPermMapper.getPermUserListById(permId);
}
/**
* 获取指定权限资源的权限角色关联数据列表。
*
* @param permId 权限资源主键Id。
* @return 角色和权限资源关联列表。
*/
public List<Map<String, Object>> getPermRoleListById(Long permId) {
return sysPermMapper.getPermRoleListById(permId);
}
/**
* 验证权限资源对象关联的数据是否都合法。
*
@@ -195,4 +163,37 @@ public class SysPermService extends BaseService<SysPerm, SysPermDto, Long> {
}
return CallResult.ok(jsonObject);
}
/**
* 查询权限资源地址的用户列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param loginName 登录名。
* @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long permId, String loginName) {
return sysPermMapper.getSysUserListWithDetail(permId, loginName);
}
/**
* 查询权限资源地址的角色列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param roleName 角色名。
* @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysRoleListWithDetail(Long permId, String roleName) {
return sysPermMapper.getSysRoleListWithDetail(permId, roleName);
}
/**
* 查询权限资源地址的菜单列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param menuName 菜单名。
* @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysMenuListWithDetail(Long permId, String menuName) {
return sysPermMapper.getSysMenuListWithDetail(permId, menuName);
}
}

View File

@@ -151,28 +151,6 @@ public class SysRoleService extends BaseService<SysRole, SysRoleDto, Long> {
return sysRoleMapper.getSysRoleList(filter, orderBy);
}
/**
* 通过权限字Id获取拥有改权限的所有角色。
* 开发人员调试用接口。
*
* @param permCodeId 查询的权限字Id。
* @return 符合条件的角色列表。
*/
public List<SysRole> getSysRoleListByPermCodeId(Long permCodeId) {
return sysRoleMapper.getSysRoleListByPermCodeId(permCodeId);
}
/**
* 通过权限资源url模糊搜索拥有改权限的所有角色。
* 开发人员调试用接口。
*
* @param url 用于模糊搜索的url。
* @return 符合条件的角色列表。
*/
public List<SysRole> getSysRoleListByPerm(String url) {
return sysRoleMapper.getSysRoleListByPerm(url);
}
/**
* 批量新增用户角色关联。
*
@@ -219,4 +197,26 @@ public class SysRoleService extends BaseService<SysRole, SysRoleDto, Long> {
}
return CallResult.ok(jsonObject);
}
/**
* 查询角色的权限资源地址列表。同时返回详细的分配路径。
*
* @param roleId 角色Id。
* @param url url过滤条件。
* @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long roleId, String url) {
return sysRoleMapper.getSysPermListWithDetail(roleId, url);
}
/**
* 查询角色的权限字列表。同时返回详细的分配路径。
*
* @param roleId 角色Id。
* @param permCode 权限字名称过滤条件。
* @return 包含从角色到权限字的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long roleId, String permCode) {
return sysRoleMapper.getSysPermCodeListWithDetail(roleId, permCode);
}
}

View File

@@ -275,6 +275,39 @@ public class SysUserService extends BaseService<SysUser, SysUserDto, Long> {
return sysUserMapper.getNotInSysUserListByRoleId(roleId, filter, orderBy);
}
/**
* 查询用户的权限资源地址列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param url url过滤条件。
* @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long userId, String url) {
return sysUserMapper.getSysPermListWithDetail(userId, url);
}
/**
* 查询用户的权限字列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param permCode 权限字名称过滤条件。
* @return 包含从用户到权限字的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long userId, String permCode) {
return sysUserMapper.getSysPermCodeListWithDetail(userId, permCode);
}
/**
* 查询用户的菜单列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param menuName 菜单名称过滤条件。
* @return 包含从用户到菜单的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysMenuListWithDetail(Long userId, String menuName) {
return sysUserMapper.getSysMenuListWithDetail(userId, menuName);
}
/**
* 验证用户对象关联的数据是否都合法。
*