diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java index 674481c..d5a80f6 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java @@ -80,4 +80,5 @@ public interface SysRoleApiService { * @return 结果 */ int changeStatus(String roleId, String status); + } diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java new file mode 100644 index 0000000..f61f98e --- /dev/null +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java @@ -0,0 +1,29 @@ +package com.qiaoba.auth.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限过滤注解 + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 部门表的别名 + */ + public String deptAlias() default ""; + + /** + * 用户表的别名 + */ + public String userAlias() default ""; + + /** + * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来 + */ + public String permission() default ""; +} diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/aspectj/DataScopeAspect.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/aspectj/DataScopeAspect.java new file mode 100644 index 0000000..9fdbafe --- /dev/null +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/aspectj/DataScopeAspect.java @@ -0,0 +1,110 @@ +package com.qiaoba.auth.aspectj; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.qiaoba.auth.annotation.DataScope; +import com.qiaoba.auth.entity.LoginUser; +import com.qiaoba.auth.entity.dto.RoleDto; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 数据过滤处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class DataScopeAspect { + /** + * 全部数据权限 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 自定数据权限 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 部门数据权限 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 部门及以下数据权限 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 仅本人数据权限 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 数据权限过滤关键字 + */ + public static final String DATA_SCOPE = "dataScope"; + + @Before("@annotation(controllerDataScope)") + public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable { + + } + + /** + * 数据范围过滤 + * + * @param joinPoint 切点 + * @param user 用户 + * @param deptAlias 部门别名 + * @param userAlias 用户别名 + */ + public static void dataScopeFilter(JoinPoint joinPoint, LoginUser user, String deptAlias, String userAlias) { + StringBuilder sqlString = new StringBuilder(); + List conditions = new ArrayList(); + + for (RoleDto role : user.getRoles()) { + String dataScope = role.getDataScope(); + if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) { + continue; + } + + if (DATA_SCOPE_ALL.equals(dataScope)) { + sqlString = new StringBuilder(); + conditions.add(dataScope); + break; + } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { + sqlString.append(StrUtil.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, + role.getRoleId())); + } else if (DATA_SCOPE_DEPT.equals(dataScope)) { + sqlString.append(StrUtil.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) { + sqlString.append(StrUtil.format( + // todo + " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or {} )", + deptAlias, user.getDeptId(), user.getDeptId())); + } else if (DATA_SCOPE_SELF.equals(dataScope)) { + if (StrUtil.isNotBlank(userAlias)) { + sqlString.append(StrUtil.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } else { + // 数据权限为仅本人且没有userAlias别名不查询任何数据 + sqlString.append(StrUtil.format(" OR {}.dept_id = 0 ", deptAlias)); + } + } + conditions.add(dataScope); + } + + // 多角色情况下,所有角色都不包含传递过来的权限字符,这个时候sqlString也会为空,所以要限制一下,不查询任何数据 + if (CollUtil.isEmpty(conditions)) { + sqlString.append(StrUtil.format(" OR {}.dept_id = 0 ", deptAlias)); + } +//find_in_set( {} , ancestors ) + } + +} diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/context/PermissionContextHolder.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/context/PermissionContextHolder.java new file mode 100644 index 0000000..2ca29f9 --- /dev/null +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/context/PermissionContextHolder.java @@ -0,0 +1,24 @@ +package com.qiaoba.auth.context; + +import cn.hutool.core.convert.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * 权限信息 + * + * @author ruoyi + */ +public class PermissionContextHolder { + private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT"; + + public static void setContext(String permission) { + RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission, + RequestAttributes.SCOPE_REQUEST); + } + + public static String getContext() { + return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES, + RequestAttributes.SCOPE_REQUEST)); + } +} diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/LoginUser.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/LoginUser.java index 6d37536..cf28441 100644 --- a/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/LoginUser.java +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/LoginUser.java @@ -2,6 +2,7 @@ package com.qiaoba.auth.entity; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.qiaoba.auth.entity.dto.RoleDto; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -54,6 +55,7 @@ public class LoginUser implements UserDetails { */ private Set permissions; + private List roles; public LoginUser() { } @@ -67,6 +69,14 @@ public class LoginUser implements UserDetails { this.roleKeys = roleKeys; } + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + public String getUserId() { return userId; } diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/dto/RoleDto.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/dto/RoleDto.java new file mode 100644 index 0000000..f43ecaf --- /dev/null +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/entity/dto/RoleDto.java @@ -0,0 +1,18 @@ +package com.qiaoba.auth.entity.dto; + +import lombok.Data; + +/** + * 角色 + * + * @author ailanyin + * @version 1.0 + * @since 2023/5/22 17:08 + */ +@Data +public class RoleDto { + + private String roleId; + private String roleKey; + private String dataScope; +} diff --git a/qiaoba-commons/qiaoba-common-base/pom.xml b/qiaoba-commons/qiaoba-common-base/pom.xml index df45e79..dba8560 100644 --- a/qiaoba-commons/qiaoba-common-base/pom.xml +++ b/qiaoba-commons/qiaoba-common-base/pom.xml @@ -20,5 +20,9 @@ org.springframework.boot spring-boot-starter-validation + + org.springframework.boot + spring-boot-starter-aop + diff --git a/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/constants/BaseConstant.java b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/constants/BaseConstant.java index 00ab8db..5d092dc 100644 --- a/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/constants/BaseConstant.java +++ b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/constants/BaseConstant.java @@ -19,6 +19,11 @@ public class BaseConstant { */ public static final String DEFAULT_SPLIT_STR = ","; + /** + * 竖线拼接符号: '|'(英文竖线) + */ + public static final String LINE_JOIN_STR = "|"; + /** * 树的key的命名 */ diff --git a/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/context/BaseContext.java b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/context/BaseContext.java new file mode 100644 index 0000000..c74bc07 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/context/BaseContext.java @@ -0,0 +1,43 @@ +package com.qiaoba.common.base.context; + +import java.util.HashMap; +import java.util.Map; + +/** + * 全局上下文对象 + * + * @author ailanyin + * @version 1.0 + * @since 2023/5/22 17:24 + */ +public class BaseContext { + + private static final String DATABASE_TYPE_MAP_KEY = "databaseType"; + + private static final ThreadLocal> CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 获取上下文中的数据源 + */ + public String getDatabaseType() { + return CONTEXT_HOLDER.get().get(DATABASE_TYPE_MAP_KEY).toString(); + } + + /** + * 设置上下文中的数据源 + */ + public void setDatabaseType(String type) { + Map map = new HashMap<>(1); + map.put(DATABASE_TYPE_MAP_KEY, type); + CONTEXT_HOLDER.set(map); + } + + /** + * 清除上下文中的数据源 + */ + public void clearDataSource() { + CONTEXT_HOLDER.remove(); + } + + +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/enums/DataBaseTypeEnum.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/enums/DataBaseTypeEnum.java new file mode 100644 index 0000000..1ec8ac3 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/enums/DataBaseTypeEnum.java @@ -0,0 +1,51 @@ +package com.qiaoba.common.database.enums; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 数据库类型 + * + * @author ailanyin + * @version 1.0 + * @since 2023/5/22 16:41 + */ +@Getter +@AllArgsConstructor +public enum DataBaseTypeEnum { + + /** + * MySQL + */ + MY_SQL("MySQL"), + + /** + * Oracle + */ + ORACLE("Oracle"), + + /** + * PostgreSQL + */ + POSTGRE_SQL("PostgreSQL"), + + /** + * SQL Server + */ + SQL_SERVER("Microsoft SQL Server"); + + private final String type; + + public static DataBaseTypeEnum find(String databaseProductName) { + if (StrUtil.isBlank(databaseProductName)) { + return null; + } + for (DataBaseTypeEnum type : values()) { + if (type.getType().equals(databaseProductName)) { + return type; + } + } + return null; + } +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/DynamicDataSourceFilter.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/DynamicDataSourceFilter.java index da37436..b448615 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/DynamicDataSourceFilter.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/DynamicDataSourceFilter.java @@ -3,6 +3,7 @@ package com.qiaoba.common.database.filters; import com.qiaoba.common.base.utils.TenantUtil; import com.qiaoba.common.database.config.DynamicDataSourceContext; import com.qiaoba.common.database.constants.DynamicDatasourceConstant; +import com.qiaoba.common.database.utils.DatabaseUtil; import com.qiaoba.common.web.utils.ResponseUtil; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -36,6 +37,7 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter { dynamicDataSourceContext.setDataSource(DynamicDatasourceConstant.DEFAULT_MASTER_DATASOURCE_KEY); // todo TenantUtil.setTenantId("1"); + DatabaseUtil.handleFindInSet(); filterChain.doFilter(request, response); dynamicDataSourceContext.clearDataSource(); TenantUtil.clearTenantId(); diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/DatabaseUtil.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/DatabaseUtil.java new file mode 100644 index 0000000..503a512 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/DatabaseUtil.java @@ -0,0 +1,55 @@ +package com.qiaoba.common.database.utils; + +import cn.hutool.core.convert.Convert; +import com.qiaoba.common.base.exceptions.ServiceException; +import com.qiaoba.common.database.config.DynamicDataSourceConfig; +import com.qiaoba.common.database.enums.DataBaseTypeEnum; +import lombok.extern.slf4j.Slf4j; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + +/** + * 数据库工具类 + * + * @author ailanyin + * @version 1.0 + * @since 2023/5/22 16:41 + */ +@Slf4j +public class DatabaseUtil { + + + /** + * 获取当前数据库类型 + */ + public static DataBaseTypeEnum getDataBaseType() { + DataSource dataSource = (DataSource) DynamicDataSourceConfig.DATA_SOURCE_MAP.get(""); + try (Connection conn = dataSource.getConnection()) { + DatabaseMetaData metaData = conn.getMetaData(); + String databaseProductName = metaData.getDatabaseProductName(); + return DataBaseTypeEnum.find(databaseProductName); + } catch (SQLException e) { + throw new ServiceException(e.getMessage()); + } + } + + public static String handleFindInSet(Object var1, String var2) { + DataBaseTypeEnum dataBaseType = getDataBaseType(); + String var = Convert.toStr(var1); + if (dataBaseType == DataBaseTypeEnum.SQL_SERVER) { + // charindex(',100,' , ',0,100,101,') <> 0 + return "charindex('," + var + ",' , ','+" + var2 + "+',') <> 0"; + } else if (dataBaseType == DataBaseTypeEnum.POSTGRE_SQL) { + // (select position(',100,' in ',0,100,101,')) <> 0 + return "(select position('," + var + ",' in ','||" + var2 + "||',')) <> 0"; + } else if (dataBaseType == DataBaseTypeEnum.ORACLE) { + // instr(',0,100,101,' , ',100,') <> 0 + return "instr(','||" + var2 + "||',' , '," + var + ",') <> 0"; + } + // find_in_set(100 , '0,100,101') + return "find_in_set(" + var + " , " + var2 + ") <> 0"; + } +} diff --git a/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/RedisService.java b/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/RedisService.java index 912d90a..c573081 100644 --- a/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/RedisService.java +++ b/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/RedisService.java @@ -50,9 +50,9 @@ public interface RedisService { /** * 批量删除 * - * @param collection keys + * @param keys keys */ - void del(Collection collection); + void del(Collection keys); /** diff --git a/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/impl/RedisServiceImpl.java b/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/impl/RedisServiceImpl.java index fb2fdc8..e6311f0 100644 --- a/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/impl/RedisServiceImpl.java +++ b/qiaoba-commons/qiaoba-common-redis/src/main/java/com/qiaoba/common/redis/service/impl/RedisServiceImpl.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 自定义Redis接口实现类 @@ -47,9 +48,9 @@ public class RedisServiceImpl implements RedisService { } @Override - public void del(Collection collection) { - // todo - redisTemplate.delete(collection); + public void del(Collection keys) { + List list = keys.stream().map(key -> key = handleKey(key)).collect(Collectors.toList()); + redisTemplate.delete(list); } @Override diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysProfileController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysProfileController.java index b3c40a7..2b0925c 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysProfileController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysProfileController.java @@ -4,6 +4,8 @@ import com.qiaoba.api.system.entity.dto.ResetUserBasicInfoDto; import com.qiaoba.auth.utils.SecurityUtil; import com.qiaoba.common.base.result.AjaxResult; import com.qiaoba.module.system.service.SysProfileService; +import com.qiaoba.module.system.service.SysUserPostService; +import com.qiaoba.module.system.service.SysUserRoleService; import com.qiaoba.module.system.service.SysUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,15 +28,16 @@ public class SysProfileController { private final SysProfileService sysProfileService; private final SysUserService sysUserService; + private final SysUserRoleService sysUserRoleService; + private final SysUserPostService sysUserPostService; @GetMapping @Operation(summary = "基本信息") public AjaxResult profile() { - String username = SecurityUtil.getLoginUserId(); - AjaxResult ajax = AjaxResult.success(sysUserService.selectById(username, false)); - // todo - ajax.put("roleGroup", "超级管理员,普通角色"); - ajax.put("postGroup", "董事长"); + String userId = SecurityUtil.getLoginUserId(); + AjaxResult ajax = AjaxResult.success(sysUserService.selectById(userId, false)); + ajax.put("roleGroup", sysUserRoleService.selectRoleGroup(userId)); + ajax.put("postGroup", sysUserPostService.selectPostGroup(userId)); return ajax; } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java index 3d26a60..d1b2f33 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java @@ -39,4 +39,11 @@ public interface SysRoleMapper extends BaseMapper { */ String selectBindUserByRoleId(@Param("list") List ids); + /** + * 查询用户拥有角色 + * + * @param userId userId + * @return 角色名称 + */ + List selectRoleGroupByUserId(String userId); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserPostMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserPostMapper.java index c063f79..e5f97a0 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserPostMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserPostMapper.java @@ -22,6 +22,14 @@ public interface SysUserPostMapper extends BaseMapper { */ List selectPostIdsByUserId(String userId); + /** + * 通过userId查询所绑定的岗位名称列表 + * + * @param userId userId + * @return postNames + */ + List selectPostNamesByUserId(String userId); + /** * 查询正在被使用的岗位名称列表 * diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserRoleMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserRoleMapper.java index 86ee9d7..e8b0918 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserRoleMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserRoleMapper.java @@ -33,6 +33,15 @@ public interface SysUserRoleMapper extends BaseMapper { */ List selectRoleKeysByUserId(@Param("userId") String userId, @Param("status") String status); + /** + * 通过userId查询所绑定的角色Key列表 + * + * @param userId userId + * @param status 状态 + * @return roleIds + */ + List selectRoleNamesByUserId(@Param("userId") String userId, @Param("status") String status); + /** * 批量取消角色所绑定的用户 * diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserPostService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserPostService.java index 2cb335b..9fc5fd4 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserPostService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserPostService.java @@ -49,4 +49,12 @@ public interface SysUserPostService { * @return postNames */ List selectUsedPostNameByIds(List postIds); + + /** + * 查询用户拥有的岗位 + * + * @param userId userId + * @return 岗位 逗号拼接 + */ + String selectPostGroup(String userId); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserRoleService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserRoleService.java index 5247a85..f1d9c47 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserRoleService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserRoleService.java @@ -60,6 +60,15 @@ public interface SysUserRoleService { */ List selectRoleKeysByUserId(String userId, String status); + /** + * 通过userId查询所绑定的角色Key列表 + * + * @param userId userId + * @param status 状态 + * @return roleNames + */ + List selectRoleNamesByUserId(String userId, String status); + /** * 批量选择用户授权 * @@ -67,4 +76,12 @@ public interface SysUserRoleService { * @param userIds userIds */ void insertAuthUsers(String roleId, List userIds); + + /** + * 查询用户拥有的角色 + * + * @param userId userId + * @return 角色 逗号拼接 + */ + String selectRoleGroup(String userId); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java index d2458ff..198d873 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java @@ -11,6 +11,7 @@ import com.qiaoba.api.system.entity.dto.DataScopeDto; import com.qiaoba.api.system.entity.dto.SysRoleDto; import com.qiaoba.api.system.entity.param.SysRoleParam; import com.qiaoba.auth.utils.SecurityUtil; +import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.common.base.exceptions.ServiceException; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserPostServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserPostServiceImpl.java index 1103a7c..8900893 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserPostServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserPostServiceImpl.java @@ -1,8 +1,11 @@ package com.qiaoba.module.system.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.Db; import com.qiaoba.api.system.entity.SysUserPost; +import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.module.system.mapper.SysUserPostMapper; import com.qiaoba.module.system.service.SysUserPostService; import lombok.RequiredArgsConstructor; @@ -48,6 +51,12 @@ public class SysUserPostServiceImpl implements SysUserPostService { return sysUserPostMapper.selectUsedPostNameByIds(postIds); } + @Override + public String selectPostGroup(String userId) { + List list = sysUserPostMapper.selectPostNamesByUserId(userId); + return CollUtil.isNotEmpty(list) ? StrUtil.join(BaseConstant.LINE_JOIN_STR, list) : StrUtil.EMPTY; + } + private QueryWrapper createWrapper(String userId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java index ccf12ad..94da2f0 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java @@ -1,8 +1,12 @@ package com.qiaoba.module.system.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.Db; import com.qiaoba.api.system.entity.SysUserRole; +import com.qiaoba.common.base.constants.BaseConstant; +import com.qiaoba.common.base.enums.BaseEnum; import com.qiaoba.module.system.mapper.SysUserRoleMapper; import com.qiaoba.module.system.service.SysUserRoleService; import lombok.RequiredArgsConstructor; @@ -54,6 +58,11 @@ public class SysUserRoleServiceImpl implements SysUserRoleService { return sysUserRoleMapper.selectRoleKeysByUserId(userId, status); } + @Override + public List selectRoleNamesByUserId(String userId, String status) { + return sysUserRoleMapper.selectRoleNamesByUserId(userId, status); + } + @Override public void insertAuthUsers(String roleId, List userIds) { List list = new ArrayList<>(); @@ -63,6 +72,12 @@ public class SysUserRoleServiceImpl implements SysUserRoleService { Db.saveBatch(list); } + @Override + public String selectRoleGroup(String userId) { + List list = selectRoleNamesByUserId(userId, BaseEnum.NORMAL.getCode()); + return CollUtil.isNotEmpty(list) ? StrUtil.join(BaseConstant.LINE_JOIN_STR, list) : StrUtil.EMPTY; + } + private QueryWrapper createWrapper(String userId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserPostMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserPostMapper.xml index 425ca47..2638510 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserPostMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserPostMapper.xml @@ -8,6 +8,14 @@ select post_id from sys_user_post where user_id = #{userId} + + + + delete from sys_user_role where role_id = #{roleId} and user_id in