『博客开发日记-后台』之新增角色接口的实现

本文最后更新于 2026年5月15日 下午

新增角色接口的实现


新增角色接口的需求

先检查角色编码是否重复

如果是自定义部门数据则必须选择部门

转换dto实体

如果是其他情况,则保存到角色表

如果是自定义的数据权限 则保存角色部门关联数据到 sys_role_dept 表中

条件:dataScope 不为空 且 dataScope=5 为“自定义部门权限” 且 deptIds 不为空 且 deptIds 里面至少有一个部门


代码实现

创建 AddRoleDto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* 添加角色请求DTO
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "添加角色请求对象")
public class AddRoleDto
{

@NotBlank(message = "角色编码不能为空")
@ApiModelProperty(value = "角色编码", required = true, example = "testRole")
private String roleCode;

@NotBlank(message = "角色名称不能为空")
@ApiModelProperty(value = "角色名称", required = true, example = "测试角色")
private String name;

@ApiModelProperty(value = "排序", example = "1")
private Integer sort;

@NotBlank(message = "状态不能为空")
@Pattern(regexp = "^[01]$", message = "状态只能为0或1")
@ApiModelProperty(value = "状态(0-正常,1-停用)", required = true, example = "0")
private String status;

@ApiModelProperty(value = "数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据 5-自定义部门数据)", example = "4")
private Integer dataScope;

@ApiModelProperty(value = "自定义权限部门ID集合(dataScope=5时有效)")
private List<Long> deptIds;

@ApiModelProperty(value = "备注", example = "这是角色备注")
private String remark;

}

在 SysRoleServiceImpl 中实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

//新增角色
@Override
@Transactional
public ResponseResult addRole(AddRoleDto addRoleDto)
{
//检查角色编码是否重复
LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRole::getRoleCode, addRoleDto.getRoleCode());
SysRole existRole = sysRoleService.getOne(wrapper);
if (existRole != null) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "角色编码已存在!");
}

//如果是自定义部门数据则必须选择部门
if (addRoleDto.getDataScope() != null
&& addRoleDto.getDataScope().equals(SystemConstants.CUSTOM_DEPT_DATA_SCOPE)
&& (addRoleDto.getDeptIds() == null || addRoleDto.getDeptIds().isEmpty())) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "自定义数据权限时必须选择部门!");
}

//转换dto实体
SysRole sysRole = BeanCopyUtils.copyBean(addRoleDto, SysRole.class);

//保存到角色表
boolean save = sysRoleService.save(sysRole);
if (!save) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "新增角色失败!");
}

//如果是自定义的数据权限 则保存角色部门关联数据(条件:dataScope 不为空 且 dataScope=5 为“自定义部门权限” 且 deptIds 不为空 且 deptIds 里面至少有一个部门)
if (addRoleDto.getDataScope() != null
&& addRoleDto.getDataScope().equals(SystemConstants.CUSTOM_DEPT_DATA_SCOPE)
&& addRoleDto.getDeptIds() != null
&& !addRoleDto.getDeptIds().isEmpty()) {

List<SysRoleDept> roleDeptList = new ArrayList<>();
for (Long deptId : addRoleDto.getDeptIds()) {
SysRoleDept roleDept = new SysRoleDept();
roleDept.setRoleId(sysRole.getId());
roleDept.setDeptId(deptId);
roleDeptList.add(roleDept);
}

//将自定义的角色部门关联数据保存到 sys_role_dept 表
boolean saveDept = sysRoleDeptService.saveBatch(roleDeptList);
if (!saveDept) {
return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "新增角色部门关联失败!");
}
}

return ResponseResult.okResult();
}




PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记-后台』之新增角色接口的实现
http://example.com/2026/05/15/『博客开发日记-后台』之新增角色接口的实现/
作者
云梦泽
发布于
2026年5月15日
更新于
2026年5月15日
许可协议