feat:角色用户权限

This commit is contained in:
2026-01-08 14:37:32 +08:00
parent faf4f23b61
commit dd64b9ad27
14 changed files with 201 additions and 19 deletions

View File

@@ -0,0 +1,9 @@
CREATE TABLE `simulation_role_permission` (
`id` bigint NOT NULL AUTO_INCREMENT,
`roleId` bigint NOT NULL COMMENT '角色id对应CID',
`permissionCode` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单权限编码',
`tenantId` bigint NOT NULL DEFAULT '0' COMMENT '租户ID',
`creator` bigint NOT NULL DEFAULT '0' COMMENT '模版创建者ID',
`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '模版创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单权限表';

View File

@@ -0,0 +1 @@
ALTER TABLE spdm_baseline.system_form_configure MODIFY COLUMN comment mediumtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '描述信息';

View File

@@ -74,13 +74,15 @@ public class SimulationReportTemplateServiceImpl extends ServiceImpl<SimulationR
upgradeTemplate.setCreator(creator);
upgradeTemplate.setTenantId(tenantId);
UploadFilesReq req = new UploadFilesReq();
req.setFile(templateDto.getFile());
SdmResponse<Long> response = dataFeignClient.uploadReportTemplateFile(req);
if (!response.isSuccess()) {
return response;
if (templateDto.getFile() != null) {
UploadFilesReq req = new UploadFilesReq();
req.setFile(templateDto.getFile());
SdmResponse<Long> response = dataFeignClient.uploadReportTemplateFile(req);
if (!response.isSuccess()) {
return response;
}
upgradeTemplate.setFileId(response.getData());
}
upgradeTemplate.setFileId(response.getData());
this.save(upgradeTemplate);
return SdmResponse.success(upgradeTemplate.getUuid());
}

View File

@@ -7,6 +7,7 @@ import com.sdm.system.model.req.role.QueryRoleReq;
import com.sdm.system.model.req.role.UpdateRoleReq;
import com.sdm.system.model.req.system.AssignRolePermissionReq;
import com.sdm.system.model.resp.SysRoleResp;
import com.sdm.system.service.ISimulationRolePermissionService;
import com.sdm.system.service.ISysRoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -20,6 +21,8 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import java.util.List;
@Tag(name = "角色管理", description = "角色相关操作接口")
@RestController
@RequestMapping("/role")
@@ -29,6 +32,9 @@ public class SysRoleController {
@Qualifier("roleService")
private ISysRoleService sysRoleService;
@Autowired
private ISimulationRolePermissionService rolePermissionService;
/**
* 角色列表查询
*/
@@ -102,7 +108,7 @@ public class SysRoleController {
@Operation(summary = "分配角色权限", description = "为指定角色分配权限")
@PostMapping("/assignPermissions")
public SdmResponse assignPermissions(@RequestBody @Valid AssignRolePermissionReq req) {
return sysRoleService.assignPermissions(req);
return rolePermissionService.assignPermissions(req);
}
/**
@@ -110,8 +116,7 @@ public class SysRoleController {
*/
@Operation(summary = "查询角色权限", description = "获取指定角色拥有的权限列表")
@GetMapping("/getRolePermissions")
public SdmResponse getRolePermissions(
@Parameter(description = "角色ID") @RequestParam("id") Long id) {
return sysRoleService.getRolePermissions(id);
public SdmResponse<List<String>> getRolePermissions(@Parameter(description = "角色ID") @RequestParam("roleId") String roleId) {
return rolePermissionService.getRolePermissions(Long.valueOf(roleId));
}
}

View File

@@ -8,6 +8,7 @@ import com.sdm.common.entity.resp.system.*;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.feign.inter.system.ISysUserFeignClient;
import com.sdm.system.model.req.user.*;
import com.sdm.system.service.ISimulationRolePermissionService;
import com.sdm.system.service.ISysUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -29,6 +30,9 @@ public class SysUserController implements ISysUserFeignClient {
@Qualifier("userService")
private ISysUserService ISysUserService;
@Autowired
private ISimulationRolePermissionService rolePermissionService;
/**
* 新增用户
*
@@ -138,7 +142,7 @@ public class SysUserController implements ISysUserFeignClient {
*/
@Operation(summary = "查询用户角色", description = "查询用户角色接口,用于查询指定用户的角色列表")
@GetMapping("/queryUserRole")
public SdmResponse<CIDRoleResp> queryUserRole(@Parameter(description = "用户id") @RequestParam("userId") Long userId) {
public SdmResponse<List<CIDRoleResp>> queryUserRole(@Parameter(description = "用户id") @RequestParam("userId") Long userId) {
return ISysUserService.queryUserRole(userId);
}
@@ -235,5 +239,11 @@ public class SysUserController implements ISysUserFeignClient {
return ISysUserService.getUserByRoleCode(roleCode, tenantId);
}
@Operation(summary = "查询用户菜单权限", description = "查询用户菜单权限")
@GetMapping("/getUserPermissions")
public SdmResponse<List<String>> getUserPermissions(@Parameter(description = "查询用户菜单权限请求参数") @RequestParam("userId") String userId) {
return rolePermissionService.getUserPermissions(Long.valueOf(userId));
}
}

View File

@@ -0,0 +1,8 @@
package com.sdm.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.system.model.entity.SimulationRolePermission;
public interface SimulationRolePermissionMapper extends BaseMapper<SimulationRolePermission> {
}

View File

@@ -0,0 +1,52 @@
package com.sdm.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_role_permission")
@ApiModel(value="SimulationRolePermission对象", description="角色菜单权限表")
public class SimulationRolePermission implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "表单ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@Schema(description = "角色id对应CID")
@TableField("roleId")
private Long roleId;
@Schema(description = "菜单权限编码")
@TableField("permissionCode")
private String permissionCode;
@Schema(description = "所属租户ID")
@TableField("tenantId")
private Long tenantId;
@Schema(description = "创建人")
@TableField("creator")
private Long creator;
@Schema(description = "创建时间")
@TableField("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@@ -10,8 +10,8 @@ import java.util.List;
public class AssignRolePermissionReq {
@NotBlank(message = "角色ID不能为空")
private Integer roleId;
private String roleId;
@NotEmpty(message = "权限ID列表不能为空")
private List<Integer> permissionIds;
@NotEmpty(message = "菜单权限编码不能为空")
private List<String> permissionCodes;
}

View File

@@ -0,0 +1,18 @@
package com.sdm.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.common.common.SdmResponse;
import com.sdm.system.model.entity.SimulationRolePermission;
import com.sdm.system.model.req.system.AssignRolePermissionReq;
import java.util.List;
public interface ISimulationRolePermissionService extends IService<SimulationRolePermission> {
SdmResponse assignPermissions(AssignRolePermissionReq req);
SdmResponse<List<String>> getRolePermissions(Long roleId);
SdmResponse<List<String>> getUserPermissions(Long userId);
}

View File

@@ -33,7 +33,7 @@ public interface ISysUserService extends IService<SysUser> {
SdmResponse updateUserRole(UpdateUserRole req);
SdmResponse<CIDRoleResp> queryUserRole(Long userId);
SdmResponse<List<CIDRoleResp>> queryUserRole(Long userId);
SdmResponse addGroup(GroupAddReq req);

View File

@@ -172,7 +172,7 @@ public class CIDISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
}
@Override
public SdmResponse<CIDRoleResp> queryUserRole(Long userId) {
public SdmResponse<List<CIDRoleResp>> queryUserRole(Long userId) {
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userId", userId);
@@ -180,7 +180,7 @@ public class CIDISysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
log.info("正在向CID用户角色API发送请求: {},参数: {}", cidUrl + queryUserRole, paramMap);
String resultJson = HttpUtil.get(cidUrl + queryUserRole, paramMap);
log.info("收到CID用户角色API的响应: {}", resultJson);
SdmResponse<CIDRoleResp> result = JSON.parseObject(resultJson, SdmResponse.class);
SdmResponse<List<CIDRoleResp>> result = JSON.parseObject(resultJson, SdmResponse.class);
return result;
} catch (Exception e) {
log.error("查询用户角色失败", e);

View File

@@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Slf4j
@@ -169,7 +170,7 @@ public class LocalUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> im
}
@Override
public SdmResponse<CIDRoleResp> queryUserRole(Long userId) {
public SdmResponse<List<CIDRoleResp>> queryUserRole(Long userId) {
SysUserRoleRelation userRoleRelation = sysUserRoleRelationService.lambdaQuery().eq(SysUserRoleRelation::getUserId, userId).one();
if (userRoleRelation == null) {
return SdmResponse.failed("用户角色不存在");
@@ -177,7 +178,7 @@ public class LocalUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> im
SysRole role = sysRoleService.getById(userRoleRelation.getRoleId());
CIDRoleResp cidRoleResp = new CIDRoleResp();
BeanUtils.copyProperties(role, cidRoleResp);
return SdmResponse.success(cidRoleResp);
return SdmResponse.success(Arrays.asList(cidRoleResp));
}
/**

View File

@@ -0,0 +1,74 @@
package com.sdm.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.resp.system.CIDRoleResp;
import com.sdm.system.dao.SimulationRolePermissionMapper;
import com.sdm.system.model.entity.SimulationRolePermission;
import com.sdm.system.model.req.system.AssignRolePermissionReq;
import com.sdm.system.service.ISimulationRolePermissionService;
import com.sdm.system.service.ISysRoleService;
import com.sdm.system.service.ISysUserService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
public class SimulationRolePermissionServiceImpl extends ServiceImpl<SimulationRolePermissionMapper, SimulationRolePermission> implements ISimulationRolePermissionService {
@Autowired
@Qualifier("userService")
private ISysUserService sysUserService;
@Override
@Transactional(rollbackFor = Exception.class)
public SdmResponse assignPermissions(AssignRolePermissionReq req) {
List<SimulationRolePermission> rolePermissionList = new ArrayList<>();
String roleId = req.getRoleId();
Long tenantId = ThreadLocalContext.getTenantId();
Long userId = ThreadLocalContext.getUserId();
this.lambdaUpdate().eq(SimulationRolePermission::getRoleId, roleId).remove();
for (String permissionCode : req.getPermissionCodes()) {
SimulationRolePermission rolePermission = new SimulationRolePermission();
rolePermission.setRoleId(Long.valueOf(roleId));
rolePermission.setPermissionCode(permissionCode);
rolePermission.setTenantId(tenantId);
rolePermission.setCreator(userId);
rolePermissionList.add(rolePermission);
}
return SdmResponse.success(this.saveBatch(rolePermissionList));
}
@Override
public SdmResponse<List<String>> getRolePermissions(Long roleId) {
List<SimulationRolePermission> rolePermissionList = this.lambdaQuery().eq(SimulationRolePermission::getRoleId, roleId).list();
if (CollectionUtils.isNotEmpty(rolePermissionList)) {
return SdmResponse.success(rolePermissionList.stream().map(SimulationRolePermission::getPermissionCode).toList());
} else {
return SdmResponse.success(new ArrayList<>());
}
}
@Override
public SdmResponse<List<String>> getUserPermissions(Long userId) {
SdmResponse<List<CIDRoleResp>> cidRoleRespSdmResponse = sysUserService.queryUserRole(userId);
if (cidRoleRespSdmResponse.getData() != null) {
List<CIDRoleResp> cidRoleRespList = cidRoleRespSdmResponse.getData();
List<String> userPermissionList = new ArrayList<>();
for (CIDRoleResp cidRoleResp : cidRoleRespList) {
List<String> rolePermissionList = getRolePermissions(cidRoleResp.getRoleId()).getData();
if (!CollectionUtils.isNotEmpty(rolePermissionList)) {
userPermissionList.addAll(rolePermissionList);
}
}
return SdmResponse.success(userPermissionList.stream().distinct().toList());
}
return SdmResponse.success(new ArrayList<>());
}
}

View File

@@ -3,6 +3,7 @@ package com.sdm.task.model.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -69,6 +70,7 @@ public class TaskPerformanceDto {
private String tenantId;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "父ID")