diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/controller/SysMenuController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/controller/SysMenuController.java index 49f4e3acc6c3e84f04c5a1d89cf4886958238d5d..f06f1d8b4fb293b6158858f4b5a2dfdb2415ce44 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/controller/SysMenuController.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/controller/SysMenuController.java @@ -107,7 +107,7 @@ public class SysMenuController { @Operation(summary = "获取菜单森林", description = "获取当前登录用户拥有权限的菜单森林") @CommonLog(value = "获取菜单森林", description = "获取当前登录用户拥有权限的菜单森林", module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT) - public CommonResult>> forest() { + public CommonResult>> forest() { return CommonResult.ok(sysMenuService.forest()); } diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/entity/SysMenuEntity.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/entity/SysMenuEntity.java index cab41d1a11b1a1ecf726f5851fa8f69dcdff9b79..8ec44ac1d2838cd1f2412c24d6abb88d948e5850 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/entity/SysMenuEntity.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/entity/SysMenuEntity.java @@ -13,6 +13,7 @@ import java.io.Serializable; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import top.milkbox.common.utils.CommonUtil; import top.milkbox.sys.modular.menu.enums.SysMenuTypeEnum; /** @@ -27,7 +28,7 @@ import top.milkbox.sys.modular.menu.enums.SysMenuTypeEnum; @EqualsAndHashCode(callSuper = true) @TableName(value = "sys_menu", autoResultMap = true) @Schema(description = "SysMenuEntity 系统_菜单表。") -public class SysMenuEntity extends CommonEntity implements Serializable { +public class SysMenuEntity extends CommonEntity implements CommonUtil.EntityTree, Serializable { /** * 主键 diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/SysMenuService.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/SysMenuService.java index ccf672070f8e18c34db210935c3d33d6e2b8cc04..6a1e9e875fbb4615a73eac09c5634dc2331e4461 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/SysMenuService.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/SysMenuService.java @@ -90,5 +90,5 @@ public interface SysMenuService extends CommonService { * * @return 菜单森林 */ - List> forest(); + List> forest(); } \ No newline at end of file diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/impl/SysMenuServiceImpl.java index 53fd725a5de8057b5886bb86a989faad6e5db2fb..ba41be1446bec804005e712d2d431f653327da0a 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/service/impl/SysMenuServiceImpl.java @@ -8,11 +8,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.milkbox.common.exceprion.CommonServiceException; import top.milkbox.common.service.impl.CommonServiceImpl; +import top.milkbox.common.utils.CommonUtil; import top.milkbox.sys.modular.menu.entity.SysMenuEntity; import top.milkbox.sys.modular.menu.mapper.SysMenuMapper; import top.milkbox.sys.modular.menu.param.SysMenuAddParam; @@ -20,6 +24,9 @@ import top.milkbox.sys.modular.menu.param.SysMenuEditParam; import top.milkbox.sys.modular.menu.param.SysMenuIdParam; import top.milkbox.sys.modular.menu.service.SysMenuService; import top.milkbox.sys.modular.menu.vo.SysMenuVo; +import top.milkbox.sys.modular.relationship.entity.SysRelationshipEntity; +import top.milkbox.sys.modular.relationship.enums.SysRelationshipTypeEnum; +import top.milkbox.sys.modular.relationship.service.SysRelationshipService; import java.util.ArrayList; import java.util.Collections; @@ -33,11 +40,15 @@ import java.util.List; */ @Slf4j @Service -@AllArgsConstructor public class SysMenuServiceImpl extends CommonServiceImpl implements SysMenuService { + @Autowired private SysMenuMapper sysMenuMapper; + @Lazy + @Autowired + private SysRelationshipService sysRelationshipService; + @Override @Transactional(rollbackFor = Exception.class) public void add(SysMenuAddParam addParam) { @@ -60,6 +71,7 @@ public class SysMenuServiceImpl extends CommonServiceImpl paramList) { super.removeByIds(paramList.stream().map(SysMenuIdParam::getId).toList()); + // TODO 此处还需要删除关系表的菜单关联信息 } @Override @@ -81,6 +93,7 @@ public class SysMenuServiceImpl extends CommonServiceImpl> forest() { + public List> forest() { int loginUserId = StpUtil.getLoginIdAsInt(); - // TODO 获取当前登录用户拥有权限的菜单森林 + // 查询用户所属的角色拥有权限的菜单id集合 + List roleIdList = sysRelationshipService.findTargetIdListByObjectId( + loginUserId, SysRelationshipTypeEnum.SYS_USER_RELATE_SYS_ROLE); + List roleMenuList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(roleIdList)) { + roleMenuList = sysRelationshipService.list( + new LambdaUpdateWrapper() + .in(SysRelationshipEntity::getObjectId, roleIdList) + .eq(SysRelationshipEntity::getCategory, SysRelationshipTypeEnum.SYS_ROLE_RELATE_SYS_MENU) + ).stream().map(SysRelationshipEntity::getTargetId).toList(); + } + // 查询用户独有权限的菜单id集合 + List userMenuIdList = sysRelationshipService.findObjectIdListByTargetId( + loginUserId, SysRelationshipTypeEnum.SYS_USER_RELATE_SYS_MENU); + // 合并两个集合 + List menuIdList = new ArrayList<>(); + menuIdList.addAll(roleMenuList); + menuIdList.addAll(userMenuIdList); + if (ObjectUtil.isEmpty(menuIdList)) { + // 如果没有数据,则返回空 + return new ArrayList<>(); + } + // 根据id集合查询菜单表 + List entityList = + super.list(new LambdaQueryWrapper().in(SysMenuEntity::getId, menuIdList)); + // 将菜单表转换为森林结构 - return null; + List> forest = CommonUtil.toTree(entityList, 0); + return forest; } } \ No newline at end of file diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/SysRelationshipService.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/SysRelationshipService.java index 80dc97e961abf82ab65e9e6e29efd2ba4e2c3ab5..e23d9836462c5a7509c2e021ada730245264eead 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/SysRelationshipService.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/SysRelationshipService.java @@ -1,6 +1,5 @@ package top.milkbox.sys.modular.relationship.service; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import top.milkbox.common.bo.EntityColumnExistence; import top.milkbox.sys.modular.relationship.bo.SysRelationshipObjectAuthTargetBo; @@ -60,14 +59,24 @@ public interface SysRelationshipService extends IService * @return 返回实体 */ SysRelationshipEntity findEntity(Integer entityId); -// -// /** -// * 分页查询 -// * -// * @param pageParam 分页查询参数 -// * @return 返回苞米豆的分页对象,没有数据,则record长度为0 -// */ -// Page page(SysRelationshipPageParam pageParam); + + /** + * 查询object关联的targetId集合
+ * object在前,target在后 + * + * @param objectId objectId + * @param type 关系类型,若类型为空,匹配所有类型 + */ + List findTargetIdListByObjectId(Integer objectId, SysRelationshipTypeEnum type); + + /** + * 查询target关联的objectId集合
+ * object在前,target在后 + * + * @param targetId targetId + * @param type 关系类型,若类型为空,匹配所有类型 + */ + List findObjectIdListByTargetId(Integer targetId, SysRelationshipTypeEnum type); /** * 通过object字段和类型字段删除
diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/impl/SysRelationshipServiceImpl.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/impl/SysRelationshipServiceImpl.java index 3ac61cff2859a7c4c6d610a98fdf0e0357137cee..fc4cc544176c0b7c57fe3e898ca54739a63b9f8a 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/impl/SysRelationshipServiceImpl.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/relationship/service/impl/SysRelationshipServiceImpl.java @@ -91,29 +91,25 @@ public class SysRelationshipServiceImpl return entity; } -// @Override -// public Page page(SysRelationshipPageParam pageParam) { -// QueryWrapper queryWrapper = new QueryWrapper<>(); -// if (ObjectUtil.isAllNotEmpty(pageParam.getSortField(), pageParam.getSortType())) { -// queryWrapper.orderBy(true, -// pageParam.getSortType() == CommonSortTypeEnum.ASC, -// StrUtil.toUnderlineCase(pageParam.getSortField())); -// } else { -// queryWrapper.lambda().orderByAsc(SysRelationshipEntity::getSortCode); -// } -// queryWrapper.lambda().orderByAsc(SysRelationshipEntity::getId); -// -// Page entityPage = super.page(pageParam.toBaomidouPage(), queryWrapper); -// // 此处进行远程调用或关联查询...... -// -// Page voPage = CommonUtil.convertPage(entityPage, entity -> { -// SysRelationshipVo vo = BeanUtil.toBean(entity, SysRelationshipVo.class); -// // 此处进行数据翻译操作,根据不同的业务逻辑将entity对象转为vo对象...... -// -// return vo; -// }); -// return voPage; -// } + @Override + public List findTargetIdListByObjectId(Integer objectId, SysRelationshipTypeEnum type) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysRelationshipEntity::getObjectId, objectId) + // 在类型不为空的情况下,添加此条件 + .eq(ObjectUtil.isNotEmpty(type), SysRelationshipEntity::getCategory, type); + List targetIdList = super.list(queryWrapper).stream().map(SysRelationshipEntity::getTargetId).toList(); + return targetIdList; + } + + @Override + public List findObjectIdListByTargetId(Integer targetId, SysRelationshipTypeEnum type) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysRelationshipEntity::getTargetId, targetId) + // 在类型不为空的情况下,添加此条件 + .eq(ObjectUtil.isNotEmpty(type), SysRelationshipEntity::getCategory, type); + List objectIdList = super.list(queryWrapper).stream().map(SysRelationshipEntity::getObjectId).toList(); + return objectIdList; + } @Override public void deleteByObjectAndType(List deleteObjectList, SysRelationshipTypeEnum type) { diff --git a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java index 401666493a7f8964ba3fb426a20b5876b1b85b23..52bfab97c15eccf05769837ff7fb391f0f2d79d1 100644 --- a/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java +++ b/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/user/controller/SysUserController.java @@ -18,6 +18,7 @@ import top.milkbox.common.bo.EntityColumnExistence; import top.milkbox.common.enums.LogTypeEnum; import top.milkbox.common.validation.annotation.CollectionElementNotNull; import top.milkbox.sys.core.config.SysConfiguration; +import top.milkbox.sys.modular.relationship.enums.SysRelationshipTypeEnum; import top.milkbox.sys.modular.relationship.service.SysRelationshipService; import top.milkbox.sys.modular.user.param.*; import top.milkbox.sys.modular.user.service.SysUserService; @@ -143,7 +144,6 @@ public class SysUserController { + "由于不存在所以未授权。", null); } - // TODO 缺少接口,给用户分配角色assignRole @PostMapping(value = "/userIdAuthRoleIdList") @Operation(summary = "授权角色", description = "单独给用户授权角色") @CommonLog(value = "授权角色", description = "单独给用户授权角色", @@ -161,5 +161,15 @@ public class SysUserController { + "由于不存在所以未授权。", null); } + @PostMapping(value = "/searchUserSRole") + @Operation(summary = "查询用户拥有的角色", description = "查询用户拥有的角色") + @CommonLog(value = "查询用户拥有的角色", description = "查询用户拥有的角色", + module = SysConfiguration.MODULE_NAME, type = LogTypeEnum.SELECT) + public CommonResult> searchUserSRole(@Validated @RequestBody SysUserIdParam userIdParam) { + List roleIdList = sysRelationshipService.findTargetIdListByObjectId( + userIdParam.getId(), SysRelationshipTypeEnum.SYS_USER_RELATE_SYS_ROLE); + return CommonResult.ok(roleIdList); + } + } \ No newline at end of file