This is an automated email from the ASF dual-hosted git repository.

chenxingchun pushed a commit to branch dev-resource-tree
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev-resource-tree by this push:
     new dd868aa  need query all authorized directory children when create task
     new 03b269b  Merge pull request #2285 from lgcareer/dev-resource-tree
dd868aa is described below

commit dd868aa499a3c387072fbd74c333291797cf1956
Author: lgcareer <[email protected]>
AuthorDate: Mon Mar 23 17:47:48 2020 +0800

    need query all authorized directory children when create task
---
 .../api/service/ResourcesService.java              | 51 +++++++++++++++-------
 .../dolphinscheduler/dao/mapper/ResourceMapper.xml |  2 +-
 2 files changed, 36 insertions(+), 17 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index 06f7071..be141c2 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -336,8 +336,7 @@ public class ResourcesService extends BaseService {
         }
 
         // updateResource data
-
-        List<Integer> childrenResource = 
resourcesMapper.listChildren(resourceId);
+        List<Integer> childrenResource = listAllChildren(resource);
         String oldFullName = resource.getFullName();
         Date now = new Date();
 
@@ -505,13 +504,9 @@ public class ResourcesService extends BaseService {
     public Map<String, Object> queryResourceList(User loginUser, ResourceType 
type) {
 
         Map<String, Object> result = new HashMap<>(5);
-        List<Resource> resourceList;
-        int userId = loginUser.getId();
-        if(isAdmin(loginUser)){
-            userId = 0;
-        }
-        resourceList = resourcesMapper.queryResourceListAuthored(userId, 
type.ordinal());
-        Visitor resourceTreeVisitor = new ResourceTreeVisitor(resourceList);
+
+        Set<Resource> allResourceList = getAllResources(loginUser, type);
+        Visitor resourceTreeVisitor = new ResourceTreeVisitor(new 
ArrayList<>(allResourceList));
         //JSONArray jsonArray = 
JSON.parseArray(JSON.toJSONString(resourceTreeVisitor.visit().getChildren(), 
SerializerFeature.SortField));
         result.put(Constants.DATA_LIST, 
resourceTreeVisitor.visit().getChildren());
         putMsg(result,Status.SUCCESS);
@@ -520,6 +515,34 @@ public class ResourcesService extends BaseService {
     }
 
     /**
+     * get all resources
+     * @param loginUser     login user
+     * @return all resource set
+     */
+    private Set<Resource> getAllResources(User loginUser, ResourceType type) {
+        int userId = loginUser.getId();
+        boolean listChildren = true;
+        if(isAdmin(loginUser)){
+            userId = 0;
+            listChildren = false;
+        }
+        List<Resource> resourceList = 
resourcesMapper.queryResourceListAuthored(userId, type.ordinal());
+        Set<Resource> allResourceList = new HashSet<>(resourceList);
+        if (listChildren) {
+            Set<Integer> authorizedIds = new HashSet<>();
+            List<Resource> authorizedDirecoty = 
resourceList.stream().filter(t->t.getUserId() != loginUser.getId() && 
t.isDirectory()).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(authorizedDirecoty)) {
+                for(Resource resource : authorizedDirecoty){
+                    authorizedIds.addAll(listAllChildren(resource));
+                }
+                List<Resource> childrenResources = 
resourcesMapper.listResourceByIds(authorizedIds.toArray(new 
Integer[authorizedIds.size()]));
+                allResourceList.addAll(childrenResources);
+            }
+        }
+        return allResourceList;
+    }
+
+    /**
      * query resource list
      *
      * @param loginUser login user
@@ -529,13 +552,9 @@ public class ResourcesService extends BaseService {
     public Map<String, Object> queryResourceJarList(User loginUser, 
ResourceType type) {
 
         Map<String, Object> result = new HashMap<>(5);
-        List<Resource> resourceList;
-        int userId = loginUser.getId();
-        if(isAdmin(loginUser)){
-            userId = 0;
-        }
-        resourceList = resourcesMapper.queryResourceListAuthored(userId, 
type.ordinal());
-        List<Resource> resources = new 
ResourceFilter(".jar",resourceList).filter();
+
+        Set<Resource> allResourceList = getAllResources(loginUser, type);
+        List<Resource> resources = new ResourceFilter(".jar",new 
ArrayList<>(allResourceList)).filter();
         Visitor resourceTreeVisitor = new ResourceTreeVisitor(resources);
         result.put(Constants.DATA_LIST, 
resourceTreeVisitor.visit().getChildren());
         putMsg(result,Status.SUCCESS);
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceMapper.xml
index 46fef9e..c1fe50f 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceMapper.xml
@@ -48,7 +48,7 @@
         select *
         from t_ds_resources
         where type=#{type} and pid=#{id}
-        <if test="userId != 0">
+        <if test="userId != 0 and id == -1">
             and id in (select resources_id from  t_ds_relation_resources_user 
where user_id=#{userId}
             union select id as resources_id  from t_ds_resources where 
user_id=#{userId})
         </if>

Reply via email to