From 5444ccc8575ec402ba51daa256e372b5e9716520 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 12 七月 2024 13:15:23 +0800
Subject: [PATCH] update 优化 数据权限支持自定义连接符

---
 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java                                |    4 ++--
 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java         |    7 +++++++
 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java |   13 ++++++++-----
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
index 6fd3c3e..f5f22d5 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
@@ -20,4 +20,11 @@
      */
     DataColumn[] value();
 
+    /**
+     * 鏉冮檺鎷兼帴鏍囪瘑绗�(鐢ㄤ簬鎸囧畾杩炴帴璇彞鐨剆ql绗﹀彿)
+     * 濡備笉濉� 榛樿 select 鐢� OR 鍏朵粬璇彞鐢� AND
+     * 鍐呭 OR 鎴栬�� AND
+     */
+    String joinStr() default "";
+
 }
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
index 74279bd..239285c 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
@@ -99,7 +99,7 @@
             return where;
         }
         // 鏋勯�犳暟鎹繃婊ゆ潯浠剁殑 SQL 鐗囨
-        String dataFilterSql = buildDataFilter(dataPermission.value(), isSelect);
+        String dataFilterSql = buildDataFilter(dataPermission, isSelect);
         if (StringUtils.isBlank(dataFilterSql)) {
             return where;
         }
@@ -120,14 +120,17 @@
     /**
      * 鏋勫缓鏁版嵁杩囨护鏉′欢鐨� SQL 璇彞
      *
-     * @param dataColumns 鏁版嵁鏉冮檺娉ㄨВ涓殑鍒椾俊鎭�
-     * @param isSelect    鏍囧織褰撳墠鎿嶄綔鏄惁涓烘煡璇㈡搷浣滐紝鏌ヨ鎿嶄綔鍜屾洿鏂版垨鍒犻櫎鎿嶄綔鍦ㄥ鐞嗚繃婊ゆ潯浠舵椂浼氭湁涓嶅悓鐨勫鐞嗘柟寮�
+     * @param dataPermission 鏁版嵁鏉冮檺娉ㄨВ
+     * @param isSelect       鏍囧織褰撳墠鎿嶄綔鏄惁涓烘煡璇㈡搷浣滐紝鏌ヨ鎿嶄綔鍜屾洿鏂版垨鍒犻櫎鎿嶄綔鍦ㄥ鐞嗚繃婊ゆ潯浠舵椂浼氭湁涓嶅悓鐨勫鐞嗘柟寮�
      * @return 鏋勫缓鐨勬暟鎹繃婊ゆ潯浠剁殑 SQL 璇彞
      * @throws ServiceException 濡傛灉瑙掕壊鐨勬暟鎹寖鍥村紓甯告垨鑰� key 涓� value 鐨勯暱搴︿笉鍖归厤锛屽垯鎶涘嚭 ServiceException 寮傚父
      */
-    private String buildDataFilter(DataColumn[] dataColumns, boolean isSelect) {
+    private String buildDataFilter(DataPermission dataPermission, boolean isSelect) {
         // 鏇存柊鎴栧垹闄ら渶婊¤冻鎵�鏈夋潯浠�
         String joinStr = isSelect ? " OR " : " AND ";
+        if (StringUtils.isNotBlank(dataPermission.joinStr())) {
+            joinStr = " " + dataPermission.joinStr() + " ";
+        }
         LoginUser user = DataPermissionHelper.getVariable("user");
         StandardEvaluationContext context = new StandardEvaluationContext();
         context.setBeanResolver(beanResolver);
@@ -145,7 +148,7 @@
                 return "";
             }
             boolean isSuccess = false;
-            for (DataColumn dataColumn : dataColumns) {
+            for (DataColumn dataColumn : dataPermission.value()) {
                 if (dataColumn.key().length != dataColumn.value().length) {
                     throw new ServiceException("瑙掕壊鏁版嵁鑼冨洿寮傚父 => key涓巚alue闀垮害涓嶅尮閰�");
                 }
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java
index 97183a6..6aeeb50 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java
@@ -44,10 +44,10 @@
     List<TestDemo> selectList(@Param(Constants.WRAPPER) Wrapper<TestDemo> queryWrapper);
 
     @Override
-    @DataPermission({
+    @DataPermission(value = {
         @DataColumn(key = "deptName", value = "dept_id"),
         @DataColumn(key = "userName", value = "user_id")
-    })
+    }, joinStr = "AND")
     List<TestDemo> selectBatchIds(@Param(Constants.COLL) Collection<? extends Serializable> idList);
 
     @Override

--
Gitblit v1.9.3