diff --git a/dao/src/main/java/cn/bunny/dao/entity/system/RolePower.java b/dao/src/main/java/cn/bunny/dao/entity/system/RolePower.java index ee90dc8..16f239e 100644 --- a/dao/src/main/java/cn/bunny/dao/entity/system/RolePower.java +++ b/dao/src/main/java/cn/bunny/dao/entity/system/RolePower.java @@ -15,11 +15,11 @@ import lombok.experimental.Accessors; @TableName("sys_role_power") @Schema(name = "RolePower对象", title = "角色权限关系", description = "角色权限关系") public class RolePower extends BaseEntity { - + @Schema(name = "roleId", title = "角色id") - private String roleId; + private Long roleId; @Schema(name = "powerId", title = "权限id") - private String powerId; + private Long powerId; } \ No newline at end of file diff --git a/dao/src/main/java/cn/bunny/dao/vo/system/rolePower/PowerVo.java b/dao/src/main/java/cn/bunny/dao/vo/system/rolePower/PowerVo.java index 21045d9..f27e6d3 100644 --- a/dao/src/main/java/cn/bunny/dao/vo/system/rolePower/PowerVo.java +++ b/dao/src/main/java/cn/bunny/dao/vo/system/rolePower/PowerVo.java @@ -1,6 +1,9 @@ package cn.bunny.dao.vo.system.rolePower; import cn.bunny.dao.vo.BaseVo; +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -15,6 +18,8 @@ import java.util.List; public class PowerVo extends BaseVo { @Schema(name = "parentId", title = "父级id") + @JsonFormat(shape = JsonFormat.Shape.STRING) + @JSONField(serializeUsing = ToStringSerializer.class) private Long parentId; @Schema(name = "parentId", title = "权限编码") diff --git a/service/src/main/java/cn/bunny/services/controller/RolePowerController.java b/service/src/main/java/cn/bunny/services/controller/RolePowerController.java index 5adf6ba..aee47dc 100644 --- a/service/src/main/java/cn/bunny/services/controller/RolePowerController.java +++ b/service/src/main/java/cn/bunny/services/controller/RolePowerController.java @@ -1,7 +1,16 @@ package cn.bunny.services.controller; +import cn.bunny.dao.pojo.result.Result; +import cn.bunny.services.service.RolePowerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + +import java.util.List; /** *

@@ -11,8 +20,18 @@ import org.springframework.web.bind.annotation.RestController; * @author Bunny * @since 2024-09-26 */ +@Tag(name = "角色和权限", description = "角色和权限相关接口") @RestController -@RequestMapping("/rolePower") +@RequestMapping("admin/rolePower") public class RolePowerController { + @Autowired + private RolePowerService rolePowerService; + + @Operation(summary = "根据角色id获取权限内容", description = "角色列表获取已选择的权限") + @GetMapping("getPowerListByRoleId") + public Mono>> getPowerListByRoleId(Long id) { + List voList = rolePowerService.getPowerListByRoleId(id); + return Mono.just(Result.success(voList)); + } } diff --git a/service/src/main/java/cn/bunny/services/mapper/RolePowerMapper.java b/service/src/main/java/cn/bunny/services/mapper/RolePowerMapper.java index 1915734..66ac09b 100644 --- a/service/src/main/java/cn/bunny/services/mapper/RolePowerMapper.java +++ b/service/src/main/java/cn/bunny/services/mapper/RolePowerMapper.java @@ -30,4 +30,12 @@ public interface RolePowerMapper extends BaseMapper { * @param roleIds 角色 */ void deleteBatchRoleIdsWithPhysics(List roleIds); + + /** + * * 根据角色id获取权限内容 + * + * @param roleId 角色id + * @return 已选择的权限列表 + */ + List selectPowerListByRoleId(Long roleId); } diff --git a/service/src/main/java/cn/bunny/services/service/RolePowerService.java b/service/src/main/java/cn/bunny/services/service/RolePowerService.java index 36d4479..357de77 100644 --- a/service/src/main/java/cn/bunny/services/service/RolePowerService.java +++ b/service/src/main/java/cn/bunny/services/service/RolePowerService.java @@ -3,6 +3,8 @@ package cn.bunny.services.service; import cn.bunny.dao.entity.system.RolePower; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 服务类 @@ -13,4 +15,11 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface RolePowerService extends IService { + /** + * * 根据角色id获取权限内容 + * + * @param id 角色id + * @return 已选择的权限列表 + */ + List getPowerListByRoleId(Long id); } diff --git a/service/src/main/java/cn/bunny/services/service/impl/PowerServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/PowerServiceImpl.java index 29f48eb..6cbf274 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/PowerServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/PowerServiceImpl.java @@ -1,15 +1,19 @@ package cn.bunny.services.service.impl; +import cn.bunny.common.service.exception.BunnyException; import cn.bunny.dao.dto.system.rolePower.PowerAddDto; import cn.bunny.dao.dto.system.rolePower.PowerDto; import cn.bunny.dao.dto.system.rolePower.PowerUpdateDto; import cn.bunny.dao.entity.system.Power; import cn.bunny.dao.pojo.result.PageResult; +import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.dao.vo.system.rolePower.PowerVo; import cn.bunny.services.mapper.PowerMapper; import cn.bunny.services.mapper.RolePowerMapper; import cn.bunny.services.service.PowerService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.validation.Valid; @@ -66,6 +70,16 @@ public class PowerServiceImpl extends ServiceImpl implements */ @Override public void addPower(@Valid PowerAddDto dto) { + // 添加权限时确保权限码和请求地址是唯一的 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Power::getPowerCode, dto.getPowerCode()) + .or() + .eq(Power::getPowerName, dto.getPowerName()) + .or() + .eq(Power::getRequestUrl, dto.getRequestUrl()); + List powerList = list(wrapper); + if (!powerList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_EXIST); + // 保存数据 Power power = new Power(); BeanUtils.copyProperties(dto, power); @@ -79,6 +93,10 @@ public class PowerServiceImpl extends ServiceImpl implements */ @Override public void updatePower(@Valid PowerUpdateDto dto) { + Long id = dto.getId(); + List powerList = list(Wrappers.lambdaQuery().eq(Power::getId, id)); + if (powerList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_NOT_EXIST); + // 更新内容 Power power = new Power(); BeanUtils.copyProperties(dto, power); diff --git a/service/src/main/java/cn/bunny/services/service/impl/RolePowerServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RolePowerServiceImpl.java index 978b5f1..30deea1 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RolePowerServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RolePowerServiceImpl.java @@ -4,8 +4,11 @@ import cn.bunny.dao.entity.system.RolePower; import cn.bunny.services.mapper.RolePowerMapper; import cn.bunny.services.service.RolePowerService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 服务实现类 @@ -17,4 +20,18 @@ import org.springframework.stereotype.Service; @Service public class RolePowerServiceImpl extends ServiceImpl implements RolePowerService { + @Autowired + private RolePowerMapper rolePowerMapper; + + /** + * * 根据角色id获取权限内容 + * + * @param id 角色id + * @return 已选择的权限列表 + */ + @Override + public List getPowerListByRoleId(Long id) { + List rolePowerList = rolePowerMapper.selectPowerListByRoleId(id); + return rolePowerList.stream().map(rolePower -> rolePower.getPowerId().toString()).toList(); + } } diff --git a/service/src/main/java/cn/bunny/services/service/impl/RoleServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RoleServiceImpl.java index 4cffe9c..795b733 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RoleServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RoleServiceImpl.java @@ -1,10 +1,12 @@ package cn.bunny.services.service.impl; +import cn.bunny.common.service.exception.BunnyException; import cn.bunny.dao.dto.system.rolePower.RoleAddDto; import cn.bunny.dao.dto.system.rolePower.RoleDto; import cn.bunny.dao.dto.system.rolePower.RoleUpdateDto; import cn.bunny.dao.entity.system.Role; import cn.bunny.dao.pojo.result.PageResult; +import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.dao.vo.system.rolePower.RoleVo; import cn.bunny.services.mapper.RoleMapper; import cn.bunny.services.mapper.RolePowerMapper; @@ -12,6 +14,7 @@ import cn.bunny.services.mapper.RouterRoleMapper; import cn.bunny.services.mapper.UserRoleMapper; import cn.bunny.services.service.RoleService; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.validation.Valid; @@ -75,6 +78,10 @@ public class RoleServiceImpl extends ServiceImpl implements Ro */ @Override public void addRole(@Valid RoleAddDto dto) { + // 判断角色码是否被添加过 + List roleList = list(Wrappers.lambdaQuery().eq(Role::getRoleCode, dto.getRoleCode())); + if (!roleList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_EXIST); + // 保存数据 Role role = new Role(); BeanUtils.copyProperties(dto, role); @@ -88,6 +95,9 @@ public class RoleServiceImpl extends ServiceImpl implements Ro */ @Override public void updateRole(@Valid RoleUpdateDto dto) { + List roleList = list(Wrappers.lambdaQuery().eq(Role::getId, dto.getId())); + if (roleList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_NOT_EXIST); + // 更新内容 Role role = new Role(); BeanUtils.copyProperties(dto, role); diff --git a/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java index 7c52805..44c6751 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java @@ -45,6 +45,7 @@ import java.util.List; public class RouterServiceImpl extends ServiceImpl implements RouterService { @Autowired private RouterServiceFactory routerServiceFactory; + @Autowired private RedisTemplate redisTemplate; diff --git a/service/src/main/resources/mapper/RolePowerMapper.xml b/service/src/main/resources/mapper/RolePowerMapper.xml index 4d47c12..22cf448 100644 --- a/service/src/main/resources/mapper/RolePowerMapper.xml +++ b/service/src/main/resources/mapper/RolePowerMapper.xml @@ -39,4 +39,11 @@ + + +