diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java new file mode 100644 index 0000000..e8428ca --- /dev/null +++ b/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java @@ -0,0 +1,24 @@ +package cn.bunny.dao.dto.system.router; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Schema(name = "AssignRolesToRoutersDto对象", title = "路由分配角色", description = "路由分配角色") +public class AssignRolesToRoutersDto { + + @Schema(name = "routerId", title = "路由id") + private Long routerId; + + @Schema(name = "roleIds", title = "角色id列表") + private List roleIds; + +} \ No newline at end of file diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/user/AssignRolesToUsersDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/user/AssignRolesToUsersDto.java new file mode 100644 index 0000000..c1ac49d --- /dev/null +++ b/dao/src/main/java/cn/bunny/dao/dto/system/user/AssignRolesToUsersDto.java @@ -0,0 +1,25 @@ +package cn.bunny.dao.dto.system.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Schema(name = "AssignRolesToUsersDto对象", title = "用户分配角色", description = "用户分配角色") +public class AssignRolesToUsersDto { + + @Schema(name = "userId", title = "用户id") + private Long userId; + + @Schema(name = "roleIds", title = "角色id列表") + private List roleIds; + +} + diff --git a/dao/src/main/java/cn/bunny/dao/entity/system/UserRole.java b/dao/src/main/java/cn/bunny/dao/entity/system/UserRole.java index 2595858..c89e05d 100644 --- a/dao/src/main/java/cn/bunny/dao/entity/system/UserRole.java +++ b/dao/src/main/java/cn/bunny/dao/entity/system/UserRole.java @@ -15,9 +15,9 @@ import lombok.experimental.Accessors; public class UserRole extends BaseEntity { @Schema(name = "userId", title = "用户id") - private String userId; + private Long userId; @Schema(name = "roleId", title = "角色id") - private String roleId; - + private Long roleId; + } \ 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 18bd86f..21045d9 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 @@ -4,6 +4,8 @@ import cn.bunny.dao.vo.BaseVo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import java.util.List; + @EqualsAndHashCode(callSuper = true) @Data @AllArgsConstructor @@ -24,4 +26,7 @@ public class PowerVo extends BaseVo { @Schema(name = "requestUrl", title = "请求路径") private String requestUrl; + @Schema(name = "children", title = "子级") + private List children; + } \ No newline at end of file diff --git a/service/src/main/java/cn/bunny/services/controller/PowerController.java b/service/src/main/java/cn/bunny/services/controller/PowerController.java index e4787d7..bad9d57 100644 --- a/service/src/main/java/cn/bunny/services/controller/PowerController.java +++ b/service/src/main/java/cn/bunny/services/controller/PowerController.java @@ -69,4 +69,11 @@ public class PowerController { powerService.deletePower(ids); return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS)); } + + @Operation(summary = "获取所有权限", description = "获取所有权限") + @GetMapping("getAllPowers") + public Mono>> getAllPowers() { + List voList = powerService.getAllPowers(); + return Mono.just(Result.success(voList)); + } } diff --git a/service/src/main/java/cn/bunny/services/controller/RoleController.java b/service/src/main/java/cn/bunny/services/controller/RoleController.java index 737665c..f052455 100644 --- a/service/src/main/java/cn/bunny/services/controller/RoleController.java +++ b/service/src/main/java/cn/bunny/services/controller/RoleController.java @@ -69,4 +69,11 @@ public class RoleController { roleService.deleteRole(ids); return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS)); } + + @Operation(summary = "获取所有角色", description = "获取所有角色") + @GetMapping("getAllRoles") + public Mono>> getAllRoles() { + List roleVoList = roleService.getAllRoles(); + return Mono.just(Result.success(roleVoList)); + } } diff --git a/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java b/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java index d09c090..24b1c9b 100644 --- a/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java +++ b/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java @@ -1,7 +1,15 @@ package cn.bunny.services.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import cn.bunny.dao.dto.system.router.AssignRolesToRoutersDto; +import cn.bunny.dao.pojo.result.Result; +import cn.bunny.services.service.RouterRoleService; +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.*; +import reactor.core.publisher.Mono; + +import java.util.List; /** *

@@ -11,8 +19,25 @@ import org.springframework.web.bind.annotation.RestController; * @author Bunny * @since 2024-09-26 */ +@Tag(name = "路由和角色", description = "路由和角色相关接口") @RestController -@RequestMapping("/routerRole") +@RequestMapping("admin/routerRole") public class RouterRoleController { + @Autowired + private RouterRoleService routerRoleService; + + @Operation(summary = "根据路由id获取所有角色", description = "根据路由id获取所有角色") + @GetMapping("getRoleListByRouterId") + public Mono>> getRoleListByRouterId(Long routerId) { + List roleListByRouterId = routerRoleService.getRoleListByRouterId(routerId); + return Mono.just(Result.success(roleListByRouterId)); + } + + @Operation(summary = "为菜单分配角色", description = "为菜单分配角色") + @PostMapping("assignRolesToRouter") + public Mono> assignRolesToRouter(@RequestBody AssignRolesToRoutersDto dto) { + routerRoleService.assignRolesToRouter(dto); + return Mono.just(Result.success()); + } } diff --git a/service/src/main/java/cn/bunny/services/controller/UserRoleController.java b/service/src/main/java/cn/bunny/services/controller/UserRoleController.java index c79e29d..32d77af 100644 --- a/service/src/main/java/cn/bunny/services/controller/UserRoleController.java +++ b/service/src/main/java/cn/bunny/services/controller/UserRoleController.java @@ -1,7 +1,15 @@ package cn.bunny.services.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import cn.bunny.dao.dto.system.user.AssignRolesToUsersDto; +import cn.bunny.dao.pojo.result.Result; +import cn.bunny.services.service.UserRoleService; +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.*; +import reactor.core.publisher.Mono; + +import java.util.List; /** *

@@ -11,8 +19,25 @@ import org.springframework.web.bind.annotation.RestController; * @author Bunny * @since 2024-09-26 */ +@Tag(name = "用户和角色", description = "用户和角色相关接口") @RestController -@RequestMapping("/userRole") +@RequestMapping("admin/userRole") public class UserRoleController { + @Autowired + private UserRoleService userRoleService; + + @Operation(summary = "根据用户id获取角色列表", description = "根据用户id获取角色列表") + @GetMapping("getRoleListByUserId") + public Mono>> getRoleListByUserId(Long userId) { + List roleVoList = userRoleService.getRoleListByUserId(userId); + return Mono.just(Result.success(roleVoList)); + } + + @Operation(summary = "为用户分配角色", description = "为用户分配角色") + @PostMapping("assignRolesToUsers") + public Mono> assignRolesToUsers(@RequestBody AssignRolesToUsersDto dto) { + userRoleService.assignRolesToUsers(dto); + return Mono.just(Result.success()); + } } diff --git a/service/src/main/java/cn/bunny/services/factory/PowerFactory.java b/service/src/main/java/cn/bunny/services/factory/PowerFactory.java new file mode 100644 index 0000000..48719c8 --- /dev/null +++ b/service/src/main/java/cn/bunny/services/factory/PowerFactory.java @@ -0,0 +1,25 @@ +package cn.bunny.services.factory; + +import cn.bunny.dao.vo.system.rolePower.PowerVo; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class PowerFactory { + + + /** + * * 构建权限树形结构 + * + * @param id 节点ID + * @param powerVoList 节点列表 + * @return 树形列表 + */ + public List handlePowerVoChildren(Long id, List powerVoList) { + return powerVoList.stream() + .filter(powerVo -> powerVo.getParentId().equals(id)) + .peek(powerVo -> powerVo.setChildren(handlePowerVoChildren(powerVo.getId(), powerVoList))) + .toList(); + } +} diff --git a/service/src/main/java/cn/bunny/services/mapper/RouterRoleMapper.java b/service/src/main/java/cn/bunny/services/mapper/RouterRoleMapper.java index 1cfe016..1739e71 100644 --- a/service/src/main/java/cn/bunny/services/mapper/RouterRoleMapper.java +++ b/service/src/main/java/cn/bunny/services/mapper/RouterRoleMapper.java @@ -15,4 +15,10 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface RouterRoleMapper extends BaseMapper { + /** + * 根据路由id删除所有角色和路由信息 + * + * @param routerId 路由id + */ + void deleteBatchIdsWithPhysicsByRouterId(Long routerId); } diff --git a/service/src/main/java/cn/bunny/services/mapper/UserRoleMapper.java b/service/src/main/java/cn/bunny/services/mapper/UserRoleMapper.java index 9cf43ab..abbccd8 100644 --- a/service/src/main/java/cn/bunny/services/mapper/UserRoleMapper.java +++ b/service/src/main/java/cn/bunny/services/mapper/UserRoleMapper.java @@ -15,4 +15,10 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserRoleMapper extends BaseMapper { + /** + * * 删除这个用户id下所有的角色信息 + * + * @param userId 用户id + */ + void deleteBatchIdsWithPhysicsByUserId(Long userId); } diff --git a/service/src/main/java/cn/bunny/services/service/PowerService.java b/service/src/main/java/cn/bunny/services/service/PowerService.java index 71091b0..d5cda33 100644 --- a/service/src/main/java/cn/bunny/services/service/PowerService.java +++ b/service/src/main/java/cn/bunny/services/service/PowerService.java @@ -49,4 +49,12 @@ public interface PowerService extends IService { * @param ids 删除id列表 */ void deletePower(List ids); + + /** + * * 获取所有权限 + * + * @return 所有权限列表 + */ + List getAllPowers(); + } diff --git a/service/src/main/java/cn/bunny/services/service/RoleService.java b/service/src/main/java/cn/bunny/services/service/RoleService.java index 3636d2c..a36b1ea 100644 --- a/service/src/main/java/cn/bunny/services/service/RoleService.java +++ b/service/src/main/java/cn/bunny/services/service/RoleService.java @@ -49,4 +49,11 @@ public interface RoleService extends IService { * @param ids 删除id列表 */ void deleteRole(List ids); + + /** + * * 获取所有角色 + * + * @return 所有角色列表 + */ + List getAllRoles(); } diff --git a/service/src/main/java/cn/bunny/services/service/RouterRoleService.java b/service/src/main/java/cn/bunny/services/service/RouterRoleService.java index 7ef3b37..d353e2e 100644 --- a/service/src/main/java/cn/bunny/services/service/RouterRoleService.java +++ b/service/src/main/java/cn/bunny/services/service/RouterRoleService.java @@ -1,8 +1,11 @@ package cn.bunny.services.service; +import cn.bunny.dao.dto.system.router.AssignRolesToRoutersDto; import cn.bunny.dao.entity.system.RouterRole; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 服务类 @@ -13,4 +16,18 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface RouterRoleService extends IService { + /** + * * 根据路由id获取所有角色 + * + * @param routerId 路由id + * @return 角色列表 + */ + List getRoleListByRouterId(Long routerId); + + /** + * * 为菜单分配角色 + * + * @param dto 路由分配角色 + */ + void assignRolesToRouter(AssignRolesToRoutersDto dto); } diff --git a/service/src/main/java/cn/bunny/services/service/UserRoleService.java b/service/src/main/java/cn/bunny/services/service/UserRoleService.java index a465e8e..5a278cd 100644 --- a/service/src/main/java/cn/bunny/services/service/UserRoleService.java +++ b/service/src/main/java/cn/bunny/services/service/UserRoleService.java @@ -1,8 +1,11 @@ package cn.bunny.services.service; +import cn.bunny.dao.dto.system.user.AssignRolesToUsersDto; import cn.bunny.dao.entity.system.UserRole; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 服务类 @@ -13,4 +16,18 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface UserRoleService extends IService { + /** + * * 为用户分配角色 + * + * @param dto 用户分配角色 + */ + void assignRolesToUsers(AssignRolesToUsersDto dto); + + /** + * * 根据用户id获取角色列表 + * + * @param userId 用户id + * @return 角色列表 + */ + List getRoleListByUserId(Long userId); } 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 9471773..3daeec6 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 @@ -6,6 +6,7 @@ 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.vo.system.rolePower.PowerVo; +import cn.bunny.services.factory.PowerFactory; import cn.bunny.services.mapper.PowerMapper; import cn.bunny.services.service.PowerService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -15,6 +16,7 @@ import jakarta.validation.Valid; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -28,6 +30,12 @@ import java.util.List; @Service public class PowerServiceImpl extends ServiceImpl implements PowerService { + private final PowerFactory powerFactory; + + public PowerServiceImpl(PowerFactory powerFactory) { + this.powerFactory = powerFactory; + } + /** * * 权限 服务实现类 * @@ -89,4 +97,30 @@ public class PowerServiceImpl extends ServiceImpl implements public void deletePower(List ids) { baseMapper.deleteBatchIdsWithPhysics(ids); } + + /** + * * 获取所有权限 + * + * @return 所有权限列表 + */ + @Override + public List getAllPowers() { + List powerList = list(); + ArrayList powerVos = new ArrayList<>(); + + // 构建返回波对象 + List powerVoList = powerList.stream().map(power -> { + PowerVo powerVo = new PowerVo(); + BeanUtils.copyProperties(power, powerVo); + return powerVo; + }).toList(); + + powerVoList.stream() + .filter(power -> power.getParentId() == 0) + .forEach(powerVo -> { + powerVo.setChildren(powerFactory.handlePowerVoChildren(powerVo.getId(), powerVoList)); + powerVos.add(powerVo); + }); + return powerVos; + } } 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 3f313bb..7c11262 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 @@ -89,4 +89,18 @@ public class RoleServiceImpl extends ServiceImpl implements Ro public void deleteRole(List ids) { baseMapper.deleteBatchIdsWithPhysics(ids); } + + /** + * * 获取所有角色 + * + * @return 所有角色列表 + */ + @Override + public List getAllRoles() { + return list().stream().map(role -> { + RoleVo roleVo = new RoleVo(); + BeanUtils.copyProperties(role, roleVo); + return roleVo; + }).toList(); + } } diff --git a/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java index a436813..80699ff 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java @@ -1,10 +1,15 @@ package cn.bunny.services.service.impl; +import cn.bunny.dao.dto.system.router.AssignRolesToRoutersDto; import cn.bunny.dao.entity.system.RouterRole; import cn.bunny.services.mapper.RouterRoleMapper; import cn.bunny.services.service.RouterRoleService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** *

@@ -15,6 +20,41 @@ import org.springframework.stereotype.Service; * @since 2024-09-26 */ @Service +@Transactional public class RouterRoleServiceImpl extends ServiceImpl implements RouterRoleService { + /** + * * 根据路由id获取所有角色 + * + * @param routerId 路由id + * @return 角色列表 + */ + @Override + public List getRoleListByRouterId(Long routerId) { + return list(Wrappers.lambdaQuery().eq(RouterRole::getRouterId, routerId)).stream() + .map(routerRole -> routerRole.getRoleId().toString()).toList(); + } + + /** + * * 为菜单分配角色 + * + * @param dto 路由分配角色 + */ + @Override + public void assignRolesToRouter(AssignRolesToRoutersDto dto) { + Long routerId = dto.getRouterId(); + List roleIds = dto.getRoleIds(); + + // 删除这个用户下所有已经分配好的角色内容 + baseMapper.deleteBatchIdsWithPhysicsByRouterId(routerId); + + // 保存分配好的角色信息 + List roleList = roleIds.stream().map(roleId -> { + RouterRole routerRole = new RouterRole(); + routerRole.setRouterId(routerId); + routerRole.setRoleId(roleId); + return routerRole; + }).toList(); + saveBatch(roleList); + } } diff --git a/service/src/main/java/cn/bunny/services/service/impl/UserRoleServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/UserRoleServiceImpl.java index 392ed04..aafe351 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/UserRoleServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/UserRoleServiceImpl.java @@ -1,10 +1,18 @@ package cn.bunny.services.service.impl; +import cn.bunny.common.service.exception.BunnyException; +import cn.bunny.dao.dto.system.user.AssignRolesToUsersDto; import cn.bunny.dao.entity.system.UserRole; +import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.services.mapper.UserRoleMapper; import cn.bunny.services.service.UserRoleService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** *

@@ -15,6 +23,46 @@ import org.springframework.stereotype.Service; * @since 2024-09-26 */ @Service +@Transactional public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { + @Autowired + private UserRoleMapper userRoleMapper; + + /** + * * 根据用户id获取角色列表 + * + * @param userId 用户id + * @return 角色列表 + */ + @Override + public List getRoleListByUserId(Long userId) { + if (userId == null) throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY); + + List userRoles = userRoleMapper.selectList(Wrappers.lambdaQuery().eq(UserRole::getUserId, userId)); + return userRoles.stream().map(userRole -> userRole.getRoleId().toString()).toList(); + } + + /** + * * 为用户分配角色 + * + * @param dto 用户分配角色 + */ + @Override + public void assignRolesToUsers(AssignRolesToUsersDto dto) { + Long userId = dto.getUserId(); + List roleIds = dto.getRoleIds(); + + // 删除这个用户下所有已经分配好的角色内容 + baseMapper.deleteBatchIdsWithPhysicsByUserId(userId); + + // 保存分配好的角色信息 + List roleList = roleIds.stream().map(roleId -> { + UserRole userRole = new UserRole(); + userRole.setUserId(userId); + userRole.setRoleId(roleId); + return userRole; + }).toList(); + saveBatch(roleList); + } } diff --git a/service/src/main/resources/mapper/RouterRoleMapper.xml b/service/src/main/resources/mapper/RouterRoleMapper.xml index 6518042..cb20929 100644 --- a/service/src/main/resources/mapper/RouterRoleMapper.xml +++ b/service/src/main/resources/mapper/RouterRoleMapper.xml @@ -19,4 +19,11 @@ id, router_id, role_id, create_user, update_time, update_user, create_time, is_deleted + + + delete + from sys_router_role + where router_id = #{routerId} + + diff --git a/service/src/main/resources/mapper/UserRoleMapper.xml b/service/src/main/resources/mapper/UserRoleMapper.xml index f0d9d20..77ec687 100644 --- a/service/src/main/resources/mapper/UserRoleMapper.xml +++ b/service/src/main/resources/mapper/UserRoleMapper.xml @@ -19,4 +19,11 @@ id, user_id, role_id, create_time, update_time, create_user, update_user, is_deleted + + + delete + from sys_user_role + where user_id = #{userId} + +