系列文章目录
《SpringBoot整合SpringSecurity实现权限控制(一):实现原理》
《SpringBoot整合SpringSecurity实现权限控制(二):权限数据基本模型设计》
《SpringBoot整合SpringSecurity实现权限控制(三):前端动态装载路由与菜单》
本文目录
一、前言
角色是基于业务管理需求而预先在系统中设定好的固定标签,每个角色需对应明确的系统权限,其所拥有的系统权限一般不会随意更改,并且角色也不会随着用户的被添加和被移除而进行改变,相较于用户管理而言更加稳定。
- 本文将实现角色管理的增删改查
二、后端实现
2.1 创建角色实体类
/**
* 角色表
*
* @author zhuhuix
* @date 2021-09-03
*/
@ApiModel(value = "角色表")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_role")
public class SysRole implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String roleCode;
private String roleName;
private String description;
@TableLogic
private Boolean enabled;
private Timestamp createTime;
@Builder.Default
private Timestamp updateTime = Timestamp.valueOf(LocalDateTime.now());
}
2.1 添加角色Mapper接口
/**
* 角色DAO接口
*
* @author zhuhuix
* @date 2021-09-13
*/
@Mapper
public interface SysRoleMapper extends BaseMapper<SysRole> {
}
2.3 实现角色增删改查服务
/**
* 角色信息接口
*
* @author zhuhuix
* @date 2021-09-13
*/
public interface SysRoleService {
/**
* 增加角色
*
* @param role 待新增的角色
* @return 增加成功的角色
*/
SysRole create(SysRole role);
/**
* 删除角色
*
* @param role 待删除的角色
* @return 已删除的角色
*/
SysRole delete(SysRole role);
/**
* 修改角色
*
* @param role 待修改的角色
* @return 修改成功的角色
*/
SysRole update(SysRole role);
/**
* 根据角色代码查找角色
*
* @param roleCode 角色代码
* @return 增加成功的角色
*/
SysRole findByRoleCode(String roleCode);
/**
* 根据角色名称查找角色
*
* @param roleName 角色代码
* @return 增加成功的角色
*/
SysRole findByRoleName(String roleName);
/**
* 获取全部角色信息
* @return 角色列表
*/
List<SysRole> findAll();
/**
* 根据条件查询角色
* @param roleQueryDto 查询条件
* @return 角色列表
*/
List<SysRole> list( RoleQueryDto roleQueryDto);
}
/**
* 角色服务实现类
*
* @author zhuhuix
* @date 2021-09-13
*/
@Slf4j
@Service
@RequiredArgsConstructor
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class SysRoleServiceImpl implements SysRoleService {
private final SysRoleMapper sysRoleMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public SysRole create(SysRole role) {
if (findByRoleCode(role.getRoleCode()) != null || findByRoleCode(role.getRoleName()) != null) {
throw new RuntimeException("该角色已存在,不得重复添加!!");
}
if (sysRoleMapper.insert(role) > 0) {
return role;
}
throw new RuntimeException("增加角色信息失败");
}
@Override
@Transactional(rollbackFor = Exception.class)
public SysRole delete(SysRole role) {
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SysRole::getRoleCode, role.getRoleCode());
if (sysRoleMapper.delete(queryWrapper) > 0) {
return role;
}
throw new RuntimeException("删除角色信息失败");
}
@Override
@Transactional(rollbackFor = Exception.class)
public SysRole update(SysRole role) {
if (sysRoleMapper.updateById(role) > 0) {
return role;
}
throw new RuntimeException("修改角色信息失败");
}
@Override
public SysRole findByRoleCode(