Browse Source

feature 增加数据权限过滤逻辑

xiahan 11 months ago
parent
commit
d91dce6f62

+ 37 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/config/QueryFilteringConfig.java

@@ -0,0 +1,37 @@
+package com.rongwei.sfcommon.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * QueryFilteringConfig class
+ *
+ * @author XH
+ * @date 2024/08/30
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "enterprise")
+@Component
+@EnableConfigurationProperties(QueryFilteringConfig.class)
+public class QueryFilteringConfig {
+    /**
+     * 查看所有工厂的角色编码
+     */
+    private String orgCod = "";
+    /**
+     * 不需要隔离的page_part_id
+     */
+    private List<String> noIsolationPagePartId = new ArrayList<>();
+    /**
+     * 参与数据过滤的数据ID 当前项目为工厂ID
+     */
+    private List<String> isolationId = new ArrayList<>();
+}

+ 3 - 2
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/CheckTemplateServiceImpl.java

@@ -528,10 +528,13 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
         List<CheckTemplateItemsDo> templateItemsDos = checkTemplateItemsService.list(new LambdaQueryWrapper<CheckTemplateItemsDo>()
                 .in(CheckTemplateItemsDo::getChecktemplateid, checkTemplateDo.getId())
                 .eq(BaseDo::getDeleted, "0"));
+
+
         if(!mode){
             templateItemsDos = templateItemsDos.stream().filter(data -> isNowCreateByFrequency(data.getFrequency())).collect(Collectors.toList());
         }
         logger.debug("本次需要生成检查计划的模板数据有:{}",templateItemsDos.size());
+
         templateItemsDos.forEach(tempDao -> {
             if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_SHIFT)) {
                 // 每班
@@ -580,8 +583,6 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
         List<ThemeCheckContentDo> themeCheckContentDos = new ArrayList<>();
         ThemeCheckItemDo checkItemDo;
         ThemeCheckContentDo themeCheckContentDo;
-        Date startTime = startCalendar.getTime();
-        Date endTime = endCalendar.getTime();
         // 模板对应的检查项
         List<CheckTemplateItemsDo> items;
 

+ 25 - 22
js-security/security-server/src/main/java/com/rongwei/savecheck/controller/CxCommonController.java

@@ -1,7 +1,6 @@
 package com.rongwei.savecheck.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
 import com.rongwei.rwadmincommon.system.domain.SysRoleDo;
 import com.rongwei.rwadmincommon.system.vo.SysOrganizationVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
@@ -13,19 +12,19 @@ import com.rongwei.rwcommon.vo.SearchColumnVo;
 import com.rongwei.sfcommon.utils.CommonUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
+import com.rongwei.sfcommon.config.QueryFilteringConfig;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import static com.rongwei.safecommon.utils.SaveConstans.*;
+import static com.rongwei.safecommon.utils.SaveConstans.AND;
 
 /**
  * CxCommonController class
@@ -36,21 +35,23 @@ import static com.rongwei.safecommon.utils.SaveConstans.*;
 @RestController
 @RequestMapping("/common")
 @RefreshScope
-public class CxCommonController {
+public class QueryFilteringController {
+
+    @Autowired
+    private QueryFilteringConfig queryFilteringConfig;
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
     public static final SearchColumnVo SEARCH_COLUMN_VO = new SearchColumnVo() {{
         setField("TENANTID");
         setFieldType("string");
         setSymbol("like");
     }};
+
     public static final ColumnQueryType COLUMN_QUERY_TYPE = new ColumnQueryType() {{
         setLastTyepRelation(AND);
         setColumnInnerRelation(AND);
     }};
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-    @Value("#{'${pagepart.blacklist}'.split(',')}")
-    private List<String> blackListPagePartIds;
-    @Value("#{'${control.rolecode}'.split(',')}")
-    private List<String> controlRoleCode;
 
     @PostMapping("/criteria/query")
     public R weekForYear(@RequestBody Map<String, Object> map) {
@@ -64,12 +65,12 @@ public class CxCommonController {
             logger.error("查询参数异常");
             return R.ok(new CriteriaQuery());
         }
-        if (StringUtils.isBlank(criteriaQuery.getPagePartId())) {
+        if(StringUtils.isBlank(criteriaQuery.getPagePartId())){
             logger.error("查询参数异常");
             return R.ok(criteriaQuery);
         }
         // 如果ID在黑名单中直接返回
-        if (blackListPagePartIds.contains(criteriaQuery.getPagePartId())) {
+        if (queryFilteringConfig.getNoIsolationPagePartId().contains(criteriaQuery.getPagePartId())) {
             return R.ok(criteriaQuery);
         }
         SysUserVo currentUser = CommonUtil.getCurrentUser();
@@ -83,7 +84,7 @@ public class CxCommonController {
             return R.ok(criteriaQuery);
         }
         // 判断是否拥有特殊角色  只有这些角色可以看所有厂区的数据
-        SysRoleDo sysRoleDo = roleDos.stream().filter(role -> controlRoleCode.contains(role.getCode())).findFirst().orElse(null);
+        SysRoleDo sysRoleDo = roleDos.stream().filter(role -> queryFilteringConfig.getOrgCod().contains(role.getCode())).findFirst().orElse(null);
         if (sysRoleDo != null) {
             return R.ok(criteriaQuery);
         }
@@ -92,15 +93,17 @@ public class CxCommonController {
             logger.error("无法获取到当前登陆人所属的组织机构");
             return R.ok(criteriaQuery);
         }
-        String topOrgId = organizationDoList.stream()
-                .filter(org -> MINUS_ONE.equals(org.getPid()))
-                .map(SysOrganizationDo::getId)
-                .distinct()
-                .collect(Collectors.joining(","));
-        if (StringUtils.isBlank(topOrgId)) {
-            topOrgId = organizationDoList.stream().map(info -> info.getFullpid().split(",")[1]).distinct().collect(Collectors.joining(","));
-        }
-        SEARCH_COLUMN_VO.setValue(topOrgId);
+        List<String> isolationId = queryFilteringConfig.getIsolationId();
+        List<String> userOrgIds = organizationDoList.stream().map(org -> {
+            if (StringUtils.isBlank(org.getFullpid())) {
+                return org.getId().split(",");
+            } else {
+                return (org.getId() + org.getFullpid()).split(",");
+            }
+        }).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
+        // 过滤的数据ID
+        String curentUserisolationId = isolationId.stream().filter(userOrgIds::contains).findFirst().orElse(null);
+        SEARCH_COLUMN_VO.setValue(curentUserisolationId);
         COLUMN_QUERY_TYPE.setColumns(Arrays.asList(SEARCH_COLUMN_VO));
         List<ColumnQueryType> columnQueryTypes = criteriaQuery.getColumnQueryTypes();
         columnQueryTypes.add(COLUMN_QUERY_TYPE);