diff --git a/README.md b/README.md index f58204078..91a2b296e 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5-blue.svg)]() [![JDK-8+](https://img.shields.io/badge/JDK-8-green.svg)]() [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]() +[![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() > RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼容原框架) @@ -18,6 +19,7 @@ | 当前框架 | RuoYi-Vue-Plus | [RuoYi-Vue-Plus文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) | 重写RuoYi-Vue全方位升级(不兼容原框架) | | satoken分支 | RuoYi-Vue-Plus-satoken | [satoken分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/satoken/) | 使用satoken重构权限鉴权(公测 可尝试上生产) | | 单体分支 | RuoYi-Vue-Plus-fast | [fast分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/) | 单体应用结构 | +| Vue3分支 | RuoYi-Vue-Plus-UI | [UI地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus-UI) | 由于组件还未完善 仅供学习 | | 原框架 | RuoYi-Vue | [RuoYi-Vue官网](http://ruoyi.vip/) | 定期同步需要的功能 | | 前端开发框架 | Vue、Element UI | [Element UI官网](https://element.eleme.cn/#/zh-CN) | | | 后端开发框架 | SpringBoot | [SpringBoot官网](https://spring.io/projects/spring-boot/#learn) | | diff --git a/pom.xml b/pom.xml index 0dd48a3b3..a1ea476ed 100644 --- a/pom.xml +++ b/pom.xml @@ -31,10 +31,10 @@ 5.7.16 4.9.2 2.5.4 - 3.16.4 + 3.16.6 2.2.1 - 3.4.1 - 1.3.5 + 3.5.0 + 1.3.6 2.3.0 @@ -161,7 +161,31 @@ cn.hutool - hutool-all + hutool-core + ${hutool.version} + + + + cn.hutool + hutool-http + ${hutool.version} + + + + cn.hutool + hutool-captcha + ${hutool.version} + + + + cn.hutool + hutool-extra + ${hutool.version} + + + + cn.hutool + hutool-jwt ${hutool.version} diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 2111510a7..52be0a28b 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -95,10 +95,38 @@ com.baomidou mybatis-plus-extension + + + + com.baomidou + dynamic-datasource-spring-boot-starter + + cn.hutool - hutool-all + hutool-core + + + cn.hutool + hutool-http + + + + cn.hutool + hutool-captcha + + + + cn.hutool + hutool-jwt + + + + cn.hutool + hutool-extra + + org.projectlombok lombok diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataColumn.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataColumn.java new file mode 100644 index 000000000..936466697 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataColumn.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限 + * + * @author Lion Li + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataColumn { + + /** + * 占位符关键字 + */ + String key() default "deptName"; + + /** + * 占位符替换值 + */ + String value() default "dept_id"; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java new file mode 100644 index 000000000..e04b23696 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限组 + * + * @author Lion Li + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermission { + + DataColumn[] value(); + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java index feaa3f42c..f1a4f9f34 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java @@ -6,11 +6,14 @@ import java.lang.annotation.*; * 数据权限过滤注解 * * @author ruoyi + * @deprecated 3.6.0 移除 {@link com.ruoyi.common.annotation.DataPermission} */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented +@Deprecated public @interface DataScope { + /** * 部门表的别名 */ @@ -25,4 +28,5 @@ public @interface DataScope { * 是否过滤用户权限 */ boolean isUser() default false; + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java index e7d2250a6..9bbc8125e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java @@ -10,11 +10,13 @@ import java.lang.annotation.*; * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 * * @author ruoyi + * @deprecated 3.6.0 移除 使用原生注解处理 方法更全 {@link com.baomidou.dynamic.datasource.annotation.DS} */ @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited +@Deprecated public @interface DataSource { /** * 切换数据源名称 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java index 4559ac998..d82779ad1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/PageQuery.java @@ -1,5 +1,10 @@ package com.ruoyi.common.core.domain; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sql.SqlUtil; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -42,4 +47,47 @@ public class PageQuery implements Serializable { @ApiModelProperty(value = "排序的方向", example = "asc,desc") private String isAsc; + /** + * 当前记录起始索引 默认值 + */ + public static final int DEFAULT_PAGE_NUM = 1; + + /** + * 每页显示记录数 默认值 默认查全部 + */ + public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + + public Page build() { + Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + OrderItem orderItem = buildOrderItem(); + if (ObjectUtil.isNotNull(orderItem)) { + page.addOrder(orderItem); + } + return page; + } + + private OrderItem buildOrderItem() { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) { + isAsc = "asc"; + } else if ("descending".equals(isAsc)) { + isAsc = "desc"; + } + if (StringUtils.isNotBlank(orderByColumn)) { + String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); + orderBy = StringUtils.toUnderScoreCase(orderBy); + if ("asc".equals(isAsc)) { + return OrderItem.asc(orderBy); + } else if ("desc".equals(isAsc)) { + return OrderItem.desc(orderBy); + } + } + return null; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 2fa57f5ca..dde679c34 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -48,15 +49,17 @@ public class SysUser extends BaseEntity { * 用户账号 */ @ApiModelProperty(value = "用户账号") - @NotBlank(message = "用户账号不能为空") + @Xss(message = "用户账号不能包含脚本字符") + @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") private String userName; /** * 用户昵称 */ - @ApiModelProperty(value = "用户昵称") - @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + @ApiModelProperty(value = "用户昵称") + @Xss(message = "用户昵称不能包含脚本字符") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") private String nickName; /** @@ -162,7 +165,7 @@ public class SysUser extends BaseEntity { private Long[] postIds; /** - * 角色ID + * 数据权限 当前角色ID */ @ApiModelProperty(value = "角色ID") @TableField(exist = false) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java index ee20abd81..9d51d243f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java @@ -1,9 +1,16 @@ package com.ruoyi.common.core.mybatisplus.core; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.BeanCopyUtils; import org.apache.ibatis.annotations.Param; +import java.io.Serializable; import java.util.Collection; +import java.util.List; +import java.util.Map; /** * 自定义 Mapper 接口, 实现 自定义扩展 @@ -18,4 +25,63 @@ public interface BaseMapperPlus extends BaseMapper { */ int insertAll(@Param("list") Collection batchList); + /** + * 根据 ID 查询 + */ + default V selectVoById(Serializable id, Class voClass){ + T obj = this.selectById(id); + return BeanCopyUtils.copy(obj, voClass); + } + + /** + * 查询(根据ID 批量查询) + */ + default List selectVoBatchIds(Collection idList, Class voClass){ + List list = this.selectBatchIds(idList); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 查询(根据 columnMap 条件) + */ + default List selectVoByMap(Map map, Class voClass){ + List list = this.selectByMap(map); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 根据 entity 条件,查询一条记录 + */ + default V selectVoOne(Wrapper wrapper, Class voClass) { + T obj = this.selectOne(wrapper); + return BeanCopyUtils.copy(obj, voClass); + } + + /** + * 根据 entity 条件,查询全部记录 + */ + default List selectVoList(Wrapper wrapper, Class voClass) { + List list = this.selectList(wrapper); + if (list == null) { + return null; + } + return BeanCopyUtils.copyList(list, voClass); + } + + /** + * 分页查询VO + */ + default > P selectVoPage(IPage page, Wrapper wrapper, Class voClass) { + IPage pageData = this.selectPage(page, wrapper); + IPage voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); + voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass)); + return (P) voPage; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java index 4de5b326d..0650cfa97 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.common.core.mybatisplus.core; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.Assert; @@ -160,76 +161,51 @@ public class ServicePlusImpl, T, V> extends ServiceI /** * 根据 ID 查询 - * - * @param id 主键ID */ @Override public V getVoById(Serializable id) { - T t = getBaseMapper().selectById(id); - return BeanCopyUtils.copy(t, voClass); + return getBaseMapper().selectVoById(id, voClass); } /** * 查询(根据ID 批量查询) - * - * @param idList 主键ID列表 */ @Override public List listVoByIds(Collection idList) { - List list = getBaseMapper().selectBatchIds(idList); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoBatchIds(idList, voClass); } /** * 查询(根据 columnMap 条件) - * - * @param columnMap 表字段 map 对象 */ @Override public List listVoByMap(Map columnMap) { - List list = getBaseMapper().selectByMap(columnMap); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoByMap(columnMap, voClass); } /** * 根据 Wrapper,查询一条记录
*

结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

- * - * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override public V getVoOne(Wrapper queryWrapper) { - T t = getOne(queryWrapper, true); - return BeanCopyUtils.copy(t, voClass); + return getBaseMapper().selectVoOne(queryWrapper, voClass); } /** * 查询列表 - * - * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override public List listVo(Wrapper queryWrapper) { - List list = getBaseMapper().selectList(queryWrapper); - if (list == null) { - return null; - } - return BeanCopyUtils.copyList(list, voClass); + return getBaseMapper().selectVoList(queryWrapper, voClass); } /** * 翻页查询 - * - * @param page 翻页对象 - * @param queryWrapper 实体对象封装操作类 + * @deprecated 3.6.0 移除 请使用 {@link #pageVo(IPage, Wrapper)} */ @Override + @Deprecated public PagePlus pageVo(PagePlus page, Wrapper queryWrapper) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); List volist = BeanCopyUtils.copyList(result.getRecords(), voClass); @@ -237,4 +213,14 @@ public class ServicePlusImpl, T, V> extends ServiceI return result; } + /** + * 翻页查询 + * + * @param page 翻页对象 + * @param queryWrapper 实体对象封装操作类 + */ + public

> P pageVo(IPage page, Wrapper queryWrapper) { + return getBaseMapper().selectVoPage(page, queryWrapper, voClass); + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java index 79d889cf0..bff381c40 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java @@ -16,9 +16,11 @@ import java.util.List; * @param 数据库实体 * @param vo实体 * @author Lion Li + * @deprecated 3.6.0 删除 请使用 {@link com.ruoyi.common.core.domain.PageQuery#build()} */ @Data @Accessors(chain = true) +@Deprecated public class PagePlus implements IPage { /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java index 81c596b4f..46b01b94d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -1,5 +1,7 @@ package com.ruoyi.common.core.page; +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -57,4 +59,29 @@ public class TableDataInfo implements Serializable { this.total = total; } + public static TableDataInfo build(IPage page) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(page.getRecords()); + rspData.setTotal(page.getTotal()); + return rspData; + } + + public static TableDataInfo build(List list) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(list.size()); + return rspData; + } + + public static TableDataInfo build() { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + return rspData; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java new file mode 100644 index 000000000..5ae69ecfa --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java @@ -0,0 +1,71 @@ +package com.ruoyi.common.enums; + +import com.ruoyi.common.utils.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 数据权限类型 + * + * 语法支持 spel 模板表达式 + * + * 内置数据 user 当前用户 内容参考 SysUser + * 如需扩展数据 需往 SysUser 内注入 + * 内置服务 sdss 系统数据权限服务 内容参考 SysDataScopeService + * 如需扩展更多自定义服务 可以参考 sdss 自行编写 + * + * @author Lion Li + */ +@Getter +@AllArgsConstructor +public enum DataScopeType { + + /** + * 全部数据权限 + */ + ALL("1", "", ""), + + /** + * 自定数据权限 + */ + CUSTOM("2", " #{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} ) ", ""), + + /** + * 部门数据权限 + */ + DEPT("3", " #{#deptName} = #{#user.deptId} ", ""), + + /** + * 部门及以下数据权限 + */ + DEPT_AND_CHILD("4", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} )", ""), + + /** + * 仅本人数据权限 + */ + SELF("5", " #{#userName} = #{#user.userId} " , " 1 = 0 "); + + private final String code; + + /** + * 语法 采用 spel 模板表达式 + */ + private final String sqlTemplate; + + /** + * 不满足 sqlTemplate 则填充 + */ + private final String elseSql; + + public static DataScopeType findCode(String code) { + if (StringUtils.isBlank(code)) { + return null; + } + for (DataScopeType type : values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java index d6fe72864..afa4e14f0 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -7,8 +7,10 @@ import lombok.Getter; * 数据源 * * @author Lion Li + * @deprecated 3.6.0 移除 */ @AllArgsConstructor +@Deprecated public enum DataSourceType { /** * 主库 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java index 16a5a24f7..5042de401 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java @@ -2,6 +2,7 @@ package com.ruoyi.common.utils; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; @@ -17,7 +18,9 @@ import java.util.List; * 分页工具 * * @author Lion Li + * @deprecated 3.6.0 删除 请使用 {@link PageQuery} 与 {@link TableDataInfo} */ +@Deprecated @NoArgsConstructor(access = AccessLevel.PRIVATE) public class PageUtils { @@ -48,11 +51,13 @@ public class PageUtils { /** * 当前记录起始索引 默认值 */ + @Deprecated public static final int DEFAULT_PAGE_NUM = 1; /** * 每页显示记录数 默认值 默认查全部 */ + @Deprecated public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; /** @@ -61,7 +66,7 @@ public class PageUtils { * @param domain 实体 * @param vo 实体 * @return 分页对象 - * @deprecated 3.6.0 删除 请使用 {@link PageUtils#buildPagePlus(PageQuery)} + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 */ @Deprecated @@ -81,22 +86,6 @@ public class PageUtils { return page; } - public static PagePlus buildPagePlus(PageQuery pageQuery) { - Integer pageNum = ObjectUtil.defaultIfNull(pageQuery.getPageNum(), DEFAULT_PAGE_NUM); - Integer pageSize = ObjectUtil.defaultIfNull(pageQuery.getPageSize(), DEFAULT_PAGE_SIZE); - String orderByColumn = pageQuery.getOrderByColumn(); - String isAsc = pageQuery.getIsAsc(); - if (pageNum <= 0) { - pageNum = DEFAULT_PAGE_NUM; - } - PagePlus page = new PagePlus<>(pageNum, pageSize); - OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - if (ObjectUtil.isNotNull(orderItem)) { - page.addOrder(orderItem); - } - return page; - } - @Deprecated public static Page buildPage() { return buildPage(null, null); @@ -107,7 +96,7 @@ public class PageUtils { * * @param domain 实体 * @return 分页对象 - * @deprecated 3.6.0 删除 请使用 {@link PageUtils#buildPage(PageQuery)} + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 */ @Deprecated @@ -127,23 +116,6 @@ public class PageUtils { return page; } - public static Page buildPage(PageQuery pageQuery) { - Integer pageNum = ObjectUtil.defaultIfNull(pageQuery.getPageNum(), DEFAULT_PAGE_NUM); - Integer pageSize = ObjectUtil.defaultIfNull(pageQuery.getPageSize(), DEFAULT_PAGE_SIZE); - String orderByColumn = pageQuery.getOrderByColumn(); - String isAsc = pageQuery.getIsAsc(); - if (pageNum <= 0) { - pageNum = DEFAULT_PAGE_NUM; - } - Page page = new Page<>(pageNum, pageSize); - OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - if (ObjectUtil.isNotNull(orderItem)) { - page.addOrder(orderItem); - } - return page; - } - - private static OrderItem buildOrderItem(String orderByColumn, String isAsc) { // 兼容前端排序类型 if ("ascending".equals(isAsc)) { @@ -163,6 +135,15 @@ public class PageUtils { return null; } + /** + * 构建 MP 普通分页对象 + * + * @param domain 实体 + * @return 分页对象 + * @deprecated 3.6.0 删除 请使用 {@link PageQuery#build()} + * 由于使用 Servlet 获取只能从 param 获取 灵活性降低 故将传参操作交给用户 + */ + @Deprecated public static TableDataInfo buildDataInfo(PagePlus page) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -172,6 +153,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build(IPage)} + */ + @Deprecated public static TableDataInfo buildDataInfo(Page page) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -181,6 +166,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build(List)} + */ + @Deprecated public static TableDataInfo buildDataInfo(List list) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -190,6 +179,10 @@ public class PageUtils { return rspData; } + /** + * @deprecated 3.6.0 删除 请使用 {@link TableDataInfo#build()} + */ + @Deprecated public static TableDataInfo buildDataInfo() { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java index 7d2541062..76bf864f4 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java @@ -22,13 +22,8 @@ public class TreeBuildUtils extends TreeUtil { */ public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label"); - /** - * 默认树父节点id - */ - public static final Long DEFAULT_PARENT_ID = 0L; - - public static List> build(List list, NodeParser nodeParser) { - return TreeUtil.build(list, DEFAULT_PARENT_ID, DEFAULT_CONFIG, nodeParser); + public static List> build(List list, Long parentId, NodeParser nodeParser) { + return TreeUtil.build(list, parentId, DEFAULT_CONFIG, nodeParser); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java index e26e7846c..522b989b9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java @@ -1,11 +1,11 @@ package com.ruoyi.common.utils; +import com.ruoyi.common.utils.spring.SpringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; -import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; @@ -17,7 +17,7 @@ import java.util.Set; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ValidatorUtils { - private static final Validator VALID = Validation.buildDefaultValidatorFactory().getValidator(); + private static final Validator VALID = SpringUtils.getBean(Validator.class); public static void validate(T object, Class... groups) { Set> validate = VALID.validate(object, groups); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java new file mode 100644 index 000000000..0a26d60a5 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author Lion Li + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Constraint(validatedBy = {XssValidator.class}) +public @interface Xss { + + String message() default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java new file mode 100644 index 000000000..03102df66 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.xss; + +import cn.hutool.core.util.ReUtil; +import cn.hutool.http.HtmlUtil; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * 自定义xss校验注解实现 + * + * @author Lion Li + */ +public class XssValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { + return !ReUtil.contains(HtmlUtil.RE_HTML_MARK, value); + } + +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java index d6e691dbb..8b5b6c155 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java @@ -36,7 +36,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "新增批量方法") @PostMapping("/add") -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult add() { List list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { @@ -50,7 +50,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "新增或更新批量方法") @PostMapping("/addOrUpdate") -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult addOrUpdate() { List list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { @@ -72,7 +72,7 @@ public class TestBatchController extends BaseController { */ @ApiOperation(value = "删除批量方法") @DeleteMapping() -// @DataSource(DataSourceType.SLAVE) +// @DS("slave") public AjaxResult remove() { return toAjax(iTestDemoService.remove(new LambdaQueryWrapper() .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0); diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java index dccea6154..7a3cb62d6 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java @@ -1,12 +1,20 @@ package com.ruoyi.demo.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.domain.vo.TestDemoVo; import org.apache.ibatis.annotations.Param; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + /** * 测试单表Mapper接口 * @@ -15,6 +23,37 @@ import org.apache.ibatis.annotations.Param; */ public interface TestDemoMapper extends BaseMapperPlus { + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) Page customPageList(@Param("page") Page page, @Param("ew") Wrapper wrapper); + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) +

> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int updateById(@Param(Constants.ENTITY) TestDemo entity); + + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int deleteBatchIds(@Param(Constants.COLLECTION) Collection idList); } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java index 05b0153b8..388095009 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java @@ -1,7 +1,16 @@ package com.ruoyi.demo.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.demo.domain.TestTree; +import org.apache.ibatis.annotations.Param; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; /** * 测试树表Mapper接口 @@ -11,4 +20,24 @@ import com.ruoyi.demo.domain.TestTree; */ public interface TestTreeMapper extends BaseMapperPlus { + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int updateById(@Param(Constants.ENTITY) TestTree entity); + + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int deleteBatchIds(@Param(Constants.COLLECTION) Collection idList); } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java index f717bfffd..a647d241a 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java @@ -1,16 +1,13 @@ package com.ruoyi.demo.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.ruoyi.common.core.domain.PageQuery; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.domain.bo.TestDemoBo; import com.ruoyi.demo.domain.vo.TestDemoVo; @@ -36,26 +33,23 @@ public class TestDemoServiceImpl extends ServicePlusImpl queryPageList(TestDemoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } /** * 自定义分页查询 */ - @DataScope(isUser = true) @Override public TableDataInfo customPageList(TestDemoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.customPageList(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = baseMapper.customPageList(pageQuery.build(), lqw); + return TableDataInfo.build(result); } - @DataScope(isUser = true) @Override public List queryList(TestDemoBo bo) { return listVo(buildQueryWrapper(bo)); @@ -63,14 +57,11 @@ public class TestDemoServiceImpl extends ServicePlusImpl buildQueryWrapper(TestDemoBo bo) { Map params = bo.getParams(); - Object dataScope = params.get("dataScope"); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getTestKey()), TestDemo::getTestKey, bo.getTestKey()); lqw.eq(StringUtils.isNotBlank(bo.getValue()), TestDemo::getValue, bo.getValue()); lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, TestDemo::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.apply(dataScope != null && StringUtils.isNotBlank(dataScope.toString()), - dataScope != null ? dataScope.toString() : null); return lqw; } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java index 2cb93ad27..c4097e667 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java @@ -3,7 +3,6 @@ package com.ruoyi.demo.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.demo.domain.TestTree; @@ -23,7 +22,7 @@ import java.util.Map; * @author Lion Li * @date 2021-07-26 */ -//@DataSource(DataSourceType.SLAVE) // 切换从库查询 +// @DS("slave") // 切换从库查询 @Service public class TestTreeServiceImpl extends ServicePlusImpl implements ITestTreeService { @@ -32,8 +31,7 @@ public class TestTreeServiceImpl extends ServicePlusImpl queryList(TestTreeBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); @@ -42,13 +40,10 @@ public class TestTreeServiceImpl extends ServicePlusImpl buildQueryWrapper(TestTreeBo bo) { Map params = bo.getParams(); - Object dataScope = params.get("dataScope"); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getTreeName()), TestTree::getTreeName, bo.getTreeName()); lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, TestTree::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.apply(dataScope != null && StringUtils.isNotBlank(dataScope.toString()), - dataScope != null ? dataScope.toString() : null); return lqw; } diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index 29786ee06..835d7de9c 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -102,6 +102,7 @@ org.apache.maven.plugins maven-resources-plugin + 2.6 ttf diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index a368e5e26..3f0065ffe 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -46,11 +46,6 @@ druid-spring-boot-starter - - - com.baomidou - dynamic-datasource-spring-boot-starter - p6spy diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index 7392d833e..1a0d8e042 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -18,9 +18,11 @@ import org.springframework.stereotype.Component; * 数据过滤处理 * * @author Lion Li + * @deprecated 3.6.0 移除 {@link com.ruoyi.framework.handler.PlusDataPermissionHandler} */ @Aspect @Component +@Deprecated public class DataScopeAspect { /** diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java index 45ffe3bca..0b1c898b3 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java @@ -18,10 +18,12 @@ import java.util.Objects; * 多数据源处理 * * @author Lion Li + * @deprecated 3.6.0 移除 使用原生方法处理 功能更全 */ @Aspect @Order(-500) @Component +@Deprecated public class DataSourceAspect { @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)" diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java index db81b7437..6339108bf 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.ruoyi.common.core.mybatisplus.methods.InsertAll; +import com.ruoyi.framework.interceptor.PlusDataPermissionInterceptor; import com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; @@ -30,6 +31,8 @@ public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 数据权限处理 + interceptor.addInnerInterceptor(dataPermissionInterceptor()); // 分页插件 interceptor.addInnerInterceptor(paginationInnerInterceptor()); // 乐观锁插件 @@ -37,6 +40,13 @@ public class MybatisPlusConfig { return interceptor; } + /** + * 数据权限拦截器 + */ + public PlusDataPermissionInterceptor dataPermissionInterceptor() { + return new PlusDataPermissionInterceptor(); + } + /** * 分页插件,自动识别数据库类型 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index f4e2b5fab..83565b6ec 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -1,6 +1,6 @@ package com.ruoyi.framework.config; -import com.ruoyi.framework.Interceptor.PlusWebInvokeTimeInterceptor; +import com.ruoyi.framework.interceptor.PlusWebInvokeTimeInterceptor; import com.yomahub.tlog.web.interceptor.TLogWebInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -52,4 +52,4 @@ public class ResourcesConfig implements WebMvcConfigurer { // 返回新的CorsFilter return new CorsFilter(source); } -} \ No newline at end of file +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java new file mode 100644 index 000000000..527fa60a4 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java @@ -0,0 +1,134 @@ +package com.ruoyi.framework.handler; + +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.service.UserService; +import com.ruoyi.common.enums.DataScopeType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import org.springframework.context.expression.BeanFactoryResolver; +import org.springframework.expression.BeanResolver; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.ParserContext; +import org.springframework.expression.common.TemplateParserContext; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 数据权限过滤 + * + * @author Lion Li + */ +@Slf4j +public class PlusDataPermissionHandler { + + private final ExpressionParser parser = new SpelExpressionParser(); + private final ParserContext parserContext = new TemplateParserContext(); + private final BeanResolver beanResolver = new BeanFactoryResolver(SpringUtils.getBeanFactory()); + + public Expression getSqlSegment(Expression where, String mappedStatementId, boolean isSelect) { + DataColumn[] dataColumns = findAnnotation(mappedStatementId); + if (ArrayUtil.isEmpty(dataColumns)) { + return where; + } + SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(SecurityUtils.getUserId()); + // 如果是超级管理员,则不过滤数据 + if (StringUtils.isNull(currentUser) || currentUser.isAdmin()) { + return where; + } + String dataFilterSql = buildDataFilter(currentUser, dataColumns, isSelect); + if (StringUtils.isBlank(dataFilterSql)) { + return where; + } + try { + Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql); + if (ObjectUtil.isNotNull(where)) { + return new AndExpression(where, expression); + } else { + return expression; + } + } catch (JSQLParserException e) { + throw new ServiceException("数据权限解析异常 => " + e.getMessage()); + } + } + + /** + * 构造数据过滤sql + */ + private String buildDataFilter(SysUser user, DataColumn[] dataColumns, boolean isSelect) { + StringBuilder sqlString = new StringBuilder(); + + StandardEvaluationContext context = new StandardEvaluationContext(); + context.setBeanResolver(beanResolver); + context.setVariable("user", user); + + for (DataColumn dataColumn : dataColumns) { + // 设置注解变量 key 为表达式变量 value 为变量值 + context.setVariable(dataColumn.key(), dataColumn.value()); + for (SysRole role : user.getRoles()) { + user.setRoleId(role.getRoleId()); + + // 获取角色权限泛型 + DataScopeType type = DataScopeType.findCode(role.getDataScope()); + if (ObjectUtil.isNull(type)) { + throw new ServiceException("角色数据范围异常 => " + role.getDataScope()); + } + // 全部数据权限直接返回 + if (type == DataScopeType.ALL) { + return ""; + } + // 不包含 key 变量 则不处理 + if (!StringUtils.contains(type.getSqlTemplate(), "#" + dataColumn.key())) { + sqlString.append(type.getElseSql()); + continue; + } + // 更新或删除需满足所有条件 + sqlString.append(isSelect ? " OR " : " AND "); + // 解析sql模板并填充 + String sql = parser.parseExpression(type.getSqlTemplate(), parserContext).getValue(context, String.class); + sqlString.append(sql); + } + } + + if (StringUtils.isNotBlank(sqlString.toString())) { + return sqlString.substring(isSelect ? 4 : 5); + } + return ""; + } + + private DataColumn[] findAnnotation(String mappedStatementId) { + StringBuilder sb = new StringBuilder(mappedStatementId); + int index = sb.lastIndexOf("."); + String clazzName = sb.substring(0, index); + String methodName = sb.substring(index + 1, sb.length()); + Class clazz = ClassUtil.loadClass(clazzName); + List methods = Arrays.stream(ClassUtil.getDeclaredMethods(clazz)) + .filter(method -> method.getName().equals(methodName)).collect(Collectors.toList()); + DataPermission dataPermission; + for (Method method : methods) { + if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) { + dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class); + return dataPermission.value(); + } + } + return null; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusDataPermissionInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusDataPermissionInterceptor.java new file mode 100644 index 000000000..a1d90ff6c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusDataPermissionInterceptor.java @@ -0,0 +1,96 @@ +package com.ruoyi.framework.interceptor; + +import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.ruoyi.framework.handler.PlusDataPermissionHandler; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.statement.delete.Delete; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import net.sf.jsqlparser.statement.select.SelectBody; +import net.sf.jsqlparser.statement.select.SetOperationList; +import net.sf.jsqlparser.statement.update.Update; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +public class PlusDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor { + + private final PlusDataPermissionHandler dataPermissionHandler = new PlusDataPermissionHandler(); + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { + if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) { + return; + } + PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql); + mpBs.sql(parserSingle(mpBs.sql(), ms.getId())); + } + + @Override + public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { + PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); + MappedStatement ms = mpSh.mappedStatement(); + SqlCommandType sct = ms.getSqlCommandType(); + if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) { + if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) { + return; + } + PluginUtils.MPBoundSql mpBs = mpSh.mPBoundSql(); + mpBs.sql(parserMulti(mpBs.sql(), ms.getId())); + } + } + + @Override + protected void processSelect(Select select, int index, String sql, Object obj) { + SelectBody selectBody = select.getSelectBody(); + if (selectBody instanceof PlainSelect) { + this.setWhere((PlainSelect) selectBody, (String) obj); + } else if (selectBody instanceof SetOperationList) { + SetOperationList setOperationList = (SetOperationList) selectBody; + List selectBodyList = setOperationList.getSelects(); + selectBodyList.forEach(s -> this.setWhere((PlainSelect) s, (String) obj)); + } + } + + @Override + protected void processUpdate(Update update, int index, String sql, Object obj) { + Expression sqlSegment = dataPermissionHandler.getSqlSegment(update.getWhere(), (String) obj, false); + if (null != sqlSegment) { + update.setWhere(sqlSegment); + } + } + + @Override + protected void processDelete(Delete delete, int index, String sql, Object obj) { + Expression sqlSegment = dataPermissionHandler.getSqlSegment(delete.getWhere(), (String) obj, false); + if (null != sqlSegment) { + delete.setWhere(sqlSegment); + } + } + + /** + * 设置 where 条件 + * + * @param plainSelect 查询对象 + * @param mappedStatementId 执行方法id + */ + protected void setWhere(PlainSelect plainSelect, String mappedStatementId) { + Expression sqlSegment = dataPermissionHandler.getSqlSegment(plainSelect.getWhere(), mappedStatementId, true); + if (null != sqlSegment) { + plainSelect.setWhere(sqlSegment); + } + } + +} + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusWebInvokeTimeInterceptor.java similarity index 98% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java rename to ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusWebInvokeTimeInterceptor.java index a82fb65c6..547fa8daf 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusWebInvokeTimeInterceptor.java @@ -1,4 +1,4 @@ -package com.ruoyi.framework.Interceptor; +package com.ruoyi.framework.interceptor; import cn.hutool.core.map.MapUtil; import com.alibaba.ttl.TransmittableThreadLocal; diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java index 1f7e20ce9..d81a45adc 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.generator.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.generator.domain.GenTableColumn; @@ -10,6 +11,7 @@ import java.util.List; * * @author Lion Li */ +@InterceptorIgnore(dataPermission = "true") public interface GenTableColumnMapper extends BaseMapperPlus { /** * 根据表名称查询列信息 diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java index c55a9a28e..8ea66a2ef 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.generator.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.generator.domain.GenTable; @@ -12,6 +13,7 @@ import java.util.List; * * @author Lion Li */ +@InterceptorIgnore(dataPermission = "true") public interface GenTableMapper extends BaseMapperPlus { diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index 2a7e2e83f..d571468ac 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -12,7 +12,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -69,14 +68,14 @@ public class GenTableServiceImpl extends ServicePlusImpl selectPageGenTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPageGenTableList(PageUtils.buildPage(pageQuery), genTable); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageGenTableList(pageQuery.build(), genTable); + return TableDataInfo.build(page); } @Override public TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPageDbTableList(PageUtils.buildPage(pageQuery), genTable); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 768b9fdb0..1aa9ea592 100644 --- a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -27,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table @@ -78,7 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from information_schema.tables where table_schema = (select database()) - AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%' + AND table_name NOT LIKE 'xxl_job_%' AND table_name NOT LIKE 'gen_%' AND table_name NOT IN (select table_name from gen_table) AND lower(table_name) like lower(concat('%', #{tableName}, '%')) @@ -133,22 +133,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by create_time desc - + - + - + - + - + - \ No newline at end of file + diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index 1f94b6956..16798f33c 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -70,7 +70,7 @@ public class ${ClassName}Controller extends BaseController { @ApiOperation("导出${functionName}列表") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") @Log(title = "${functionName}", businessType = BusinessType.EXPORT) - @GetMapping("/export") + @PostMapping("/export") public void export(@Validated ${ClassName}Bo bo, HttpServletResponse response) { List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo); ExcelUtil.exportExcel(list, "${functionName}", ${ClassName}Vo.class, response); diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index 15059c07e..ad19c77a7 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -3,8 +3,6 @@ package ${packageName}.service.impl; import cn.hutool.core.bean.BeanUtil; import com.ruoyi.common.utils.StringUtils; #if($table.crud || $table.sub) -import com.ruoyi.common.utils.PageUtils; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; #end @@ -40,8 +38,8 @@ public class ${ClassName}ServiceImpl extends ServicePlusImpl<${ClassName}Mapper, @Override public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) { LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo); - PagePlus<${ClassName}, ${ClassName}Vo> result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page<${ClassName}Vo> result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } #end diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index 2b230bf6a..aa855a326 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -3,6 +3,7 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,6 +12,7 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; + /** * 通知公告表 sys_notice * @@ -32,6 +34,7 @@ public class SysNotice extends BaseEntity { /** * 公告标题 */ + @Xss(message = "公告标题不能包含脚本字符") @ApiModelProperty(value = "公告标题") @NotBlank(message = "公告标题不能为空") @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java index ff081ce90..775da2ba8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java @@ -22,7 +22,7 @@ public class SysOssConfig extends BaseEntity { * 主建 */ @TableId(value = "oss_config_id") - private Integer ossConfigId; + private Long ossConfigId; /** * 配置key diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java index a53e9091a..3b700d48c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java @@ -9,6 +9,7 @@ import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ValidatorUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.service.ISysConfigService; @@ -53,12 +54,14 @@ public class SysUserImportListener extends AnalysisEventListener").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); } else if (isUpdateSupport) { + ValidatorUtils.validate(user); user.setUpdateBy(operName); userService.updateUser(user); successNum++; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java index d0ae46dcd..317be7e3c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -1,5 +1,7 @@ package com.ruoyi.system.mapper; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import org.apache.ibatis.annotations.Param; @@ -19,6 +21,9 @@ public interface SysDeptMapper extends BaseMapperPlus { * @param dept 部门信息 * @return 部门信息集合 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id") + }) List selectDeptList(SysDept dept); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index eb440065f..d2721ee4d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import org.apache.ibatis.annotations.Param; @@ -14,6 +16,9 @@ import java.util.List; */ public interface SysRoleMapper extends BaseMapperPlus { + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id") + }) Page selectPageRoleList(@Param("page") Page page, @Param("role") SysRole role); /** @@ -22,6 +27,9 @@ public interface SysRoleMapper extends BaseMapperPlus { * @param role 角色信息 * @return 角色数据集合信息 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id") + }) List selectRoleList(SysRole role); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index e930d879a..1a07f7f92 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.DataColumn; +import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import org.apache.ibatis.annotations.Param; @@ -14,6 +16,10 @@ import java.util.List; */ public interface SysUserMapper extends BaseMapperPlus { + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) Page selectPageUserList(@Param("page") Page page, @Param("user") SysUser user); /** @@ -22,6 +28,10 @@ public interface SysUserMapper extends BaseMapperPlus { * @param sysUser 用户信息 * @return 用户信息集合信息 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) List selectUserList(SysUser sysUser); /** @@ -30,6 +40,10 @@ public interface SysUserMapper extends BaseMapperPlus { * @param user 用户信息 * @return 用户信息集合信息 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) Page selectAllocatedList(@Param("page") Page page, @Param("user") SysUser user); /** @@ -38,6 +52,10 @@ public interface SysUserMapper extends BaseMapperPlus { * @param user 用户信息 * @return 用户信息集合信息 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) Page selectUnallocatedList(@Param("page") Page page, @Param("user") SysUser user); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDataScopeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDataScopeService.java new file mode 100644 index 000000000..34e2ea33c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDataScopeService.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.service; + +/** + * 通用 数据权限 服务 + * + * @author Lion Li + */ +public interface SysDataScopeService { + + /** + * 获取角色自定义权限 + * @param roleId 角色id + * @return 部门id组 + */ + String getRoleCustom(Long roleId); + + /** + * 获取部门及以下权限 + * @param deptId 部门id + * @return 部门id组 + */ + String getDeptAndChild(Long deptId); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 99966da66..0b16029e1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -1,18 +1,16 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; +import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.ConfigService; -import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysConfig; @@ -42,8 +40,8 @@ public class SysConfigServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** @@ -53,7 +51,7 @@ public class SysConfigServiceImpl extends ServicePlusImpl list = roleDeptMapper.selectList( + new LambdaQueryWrapper() + .select(SysRoleDept::getDeptId) + .eq(SysRoleDept::getRoleId, roleId)); + if (CollUtil.isNotEmpty(list)) { + return list.stream().map(rd -> Convert.toStr(rd.getDeptId())).collect(Collectors.joining(",")); + } + return null; + } + + @Override + public String getDeptAndChild(Long deptId) { + List list = deptMapper.selectList(new LambdaQueryWrapper() + .select(SysDept::getDeptId) + .eq(SysDept::getDeptId, deptId) + .or() + .apply("find_in_set({0},ancestors)", deptId)); + if (CollUtil.isNotEmpty(list)) { + return list.stream().map(d -> Convert.toStr(d.getDeptId())).collect(Collectors.joining(",")); + } + return null; + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 1c03b8525..0f8897fe4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,10 +1,10 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; @@ -46,8 +46,9 @@ public class SysDeptServiceImpl extends ServicePlusImpl selectDeptList(SysDept dept) { +// return baseMapper.selectList(); +// return baseMapper.selectList(new LambdaQueryWrapper<>()); return baseMapper.selectDeptList(dept); } @@ -59,7 +60,11 @@ public class SysDeptServiceImpl extends ServicePlusImpl> buildDeptTreeSelect(List depts) { - return TreeBuildUtils.build(depts, (dept, tree) -> + if (CollUtil.isEmpty(depts)) { + return CollUtil.newArrayList(); + } + Long parentId = depts.get(0).getParentId(); + return TreeBuildUtils.build(depts, parentId, (dept, tree) -> tree.setId(dept.getDeptId()) .setParentId(dept.getParentId()) .setName(dept.getDeptName()) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index bf96b7cf7..7726ee010 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -7,7 +7,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; @@ -31,8 +30,8 @@ public class SysDictDataServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index a5344d073..1934f2085 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -13,7 +13,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.DictService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; @@ -48,8 +47,8 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java index e900abd35..487e811ea 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.LogininforService; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; @@ -100,8 +99,8 @@ public class SysLogininforServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 9c3bfeb77..a604a12b7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.Constants; @@ -157,7 +158,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl childrenList = new ArrayList(); RouterVo children = new RouterVo(); - String routerPath = StringUtils.replaceEach(menu.getPath(), new String[]{Constants.HTTP, Constants.HTTPS}, new String[]{"", ""}); + String routerPath = innerLinkReplaceEach(menu.getPath()); children.setPath(routerPath); children.setComponent(UserConstants.INNER_LINK); children.setName(StringUtils.capitalize(routerPath)); @@ -178,7 +179,11 @@ public class SysMenuServiceImpl extends ServicePlusImpl> buildMenuTreeSelect(List menus) { - return TreeBuildUtils.build(menus, (menu, tree) -> + if (CollUtil.isEmpty(menus)) { + return CollUtil.newArrayList(); + } + Long parentId = menus.get(0).getParentId(); + return TreeBuildUtils.build(menus, parentId, (menu, tree) -> tree.setId(menu.getMenuId()) .setParentId(menu.getParentId()) .setName(menu.getMenuName()) @@ -297,7 +302,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl list, SysMenu t) { return getChildList(list, t).size() > 0; } + + /** + * 内链域名特殊字符替换 + * + * @return + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS }, + new String[] { "", "" }); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index f3a1db326..16bc8525e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.mapper.SysNoticeMapper; @@ -29,8 +28,8 @@ public class SysNoticeServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index a03274d39..9371d5a2a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.OperLogService; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.system.domain.SysOperLog; @@ -65,8 +64,8 @@ public class SysOperLogServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java index 6a08ba1a7..9c2830108 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java @@ -5,15 +5,14 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.constant.OssConstant; @@ -70,8 +69,8 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl queryPageList(SysOssConfigBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index 8dcafeaf4..e062fbcf2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -2,12 +2,11 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.factory.OssFactory; @@ -36,8 +35,8 @@ public class SysOssServiceImpl extends ServicePlusImpl queryPageList(SysOssBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - PagePlus result = pageVo(PageUtils.buildPagePlus(pageQuery), lqw); - return PageUtils.buildDataInfo(result); + Page result = pageVo(pageQuery.build(), lqw); + return TableDataInfo.build(result); } private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index 9f9c2574f..058d7edd4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -7,7 +7,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; @@ -37,8 +36,8 @@ public class SysPostServiceImpl extends ServicePlusImpl page = page(PageUtils.buildPage(pageQuery), lqw); - return PageUtils.buildDataInfo(page); + Page page = page(pageQuery.build(), lqw); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index de47ff0ba..514afb13c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -2,7 +2,6 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.entity.SysRole; @@ -10,7 +9,6 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -46,10 +44,9 @@ public class SysRoleServiceImpl extends ServicePlusImpl selectPageRoleList(SysRole role, PageQuery pageQuery) { - Page page = baseMapper.selectPageRoleList(PageUtils.buildPage(pageQuery), role); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageRoleList(pageQuery.build(), role); + return TableDataInfo.build(page); } /** @@ -59,7 +56,6 @@ public class SysRoleServiceImpl extends ServicePlusImpl selectRoleList(SysRole role) { return baseMapper.selectRoleList(role); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index be9999424..a31b43a4d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.entity.SysRole; @@ -13,7 +12,6 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -54,10 +52,9 @@ public class SysUserServiceImpl extends ServicePlusImpl selectPageUserList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectPageUserList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectPageUserList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** @@ -67,7 +64,6 @@ public class SysUserServiceImpl extends ServicePlusImpl selectUserList(SysUser user) { return baseMapper.selectUserList(user); } @@ -79,10 +75,9 @@ public class SysUserServiceImpl extends ServicePlusImpl selectAllocatedList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectAllocatedList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectAllocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** @@ -92,10 +87,9 @@ public class SysUserServiceImpl extends ServicePlusImpl selectUnallocatedList(SysUser user, PageQuery pageQuery) { - Page page = baseMapper.selectUnallocatedList(PageUtils.buildPage(pageQuery), user); - return PageUtils.buildDataInfo(page); + Page page = baseMapper.selectUnallocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); } /** diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index 346332c76..8e9d1d758 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -42,17 +42,17 @@ AND status = #{status} - - - AND ( ${params.dataScope} ) - + + + + order by d.parent_id, d.order_num @@ -88,10 +88,10 @@ and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - - - AND ( ${params.dataScope} ) - + + + + order by r.role_sort diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 5d9a18568..d9a927fb2 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -108,10 +108,10 @@ AND (u.dept_id = #{user.deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{user.deptId}, ancestors) )) - - - AND ( ${user.params.dataScope} ) - + + + +