Browse Source

解决查询文件时,目录权限相关BUG.

wukai 1 year ago
parent
commit
54cd792c93

+ 1 - 1
doc-biz/pom.xml

@@ -46,7 +46,7 @@
         <dependency>
             <groupId>com.jjt</groupId>
             <artifactId>jjt-common</artifactId>
-        </dependency>  <!-- 通用工具-->
+        </dependency> 
         <dependency>
             <groupId>com.jjt</groupId>
             <artifactId>jjt-system</artifactId>

+ 4 - 31
doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java

@@ -8,7 +8,6 @@ import com.doc.common.annotation.Log;
 import com.doc.common.constant.Constants;
 import com.doc.common.core.controller.BaseController;
 import com.doc.common.core.domain.AjaxResult;
-import com.doc.common.core.domain.entity.SysRole;
 import com.doc.common.enums.BusinessType;
 import com.doc.common.enums.EventLevel;
 import com.doc.common.utils.DateUtils;
@@ -19,8 +18,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 文档目录管理Controller
@@ -122,38 +121,12 @@ public class DocDirController extends BaseController {
         docDir.setSpaceId(space.getSpaceId());
         docDir.setParentId(0L);
 
-        addRole(docDir, type);
+        docDirService.addRole(docDir, type);
         List<DocDir> list = docDirService.selectDocDirList(docDir);
 
         return getChildren(list.get(0), st);
     }
 
-    /**
-     * 添加公共目录和部门目录权限控制
-     *
-     * @param dir  目录
-     * @param type 空间类型
-     */
-    private void addRole(DocDir dir, String type) {
-        String pubKey = "1";
-        String deptKey = "2";
-        String pubRole = "system";
-        String deptRole = "dept";
-        //如果不是个人空间,则需要按权限
-        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
-        Set<String> roleKeys = roles.stream().map(SysRole::getRoleKey).collect(Collectors.toSet());
-        //如果是公共空间,且不为系统管理员
-        boolean pubFlag = pubKey.equals(type) && !roleKeys.contains(pubRole);
-        //如果是部门空间,且不为部门管理员
-        boolean deptFlag = deptKey.equals(type) && !roleKeys.contains(deptRole);
-        if (pubFlag || deptFlag) {
-            //则需要判断组织目录是否有权限访问
-            Map<String, Object> params = new HashMap<>(4);
-            params.put("flag", 1);
-            params.put("uid", SecurityUtils.getUserId());
-            dir.setParams(params);
-        }
-    }
 
     /**
      * 递归获取目录树
@@ -227,7 +200,7 @@ public class DocDirController extends BaseController {
     @ApiOperation("按空间类型查询目录列表")
     @GetMapping("/list/{type}")
     public AjaxResult listByType(@ApiParam(value = "目录类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type, DocDir docDir) {
-        addRole(docDir, type);
+        docDirService.addRole(docDir, type);
         return list(docDir);
     }
 

+ 0 - 10
doc-biz/src/main/java/com/doc/biz/mapper/DocDirMapper.java

@@ -2,7 +2,6 @@ package com.doc.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doc.biz.domain.DocDir;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -60,13 +59,4 @@ public interface DocDirMapper extends BaseMapper<DocDir> {
      * @return 结果
      */
     public int deleteDocDirByDirIds(Long[] dirIds);
-
-    /**
-     * 查询当前用户下所有有权限的目录ID
-     *
-     * @param spaceIds 空间ID
-     * @param userId   用户ID
-     * @return 结果集
-     */
-    List<DocDir> selectDirByUser(@Param("spaceIds") List<Long> spaceIds, @Param("userId") Long userId);
 }

+ 4 - 4
doc-biz/src/main/java/com/doc/biz/service/IDocDirService.java

@@ -96,10 +96,10 @@ public interface IDocDirService {
     Map<String, Object> selectDirByUser(Long userId, String type);
 
     /**
-     * 根据权限控制查询目录列表
+     * 添加公共目录和部门目录权限控制
      *
-     * @param docDir 对象
-     * @return 结果
+     * @param docDir  目录
+     * @param type 空间类型
      */
-    List<DocDir> selectDocDirList4type(DocDir docDir);
+    void addRole(DocDir docDir, String type);
 }

+ 39 - 10
doc-biz/src/main/java/com/doc/biz/service/impl/DocDirServiceImpl.java

@@ -10,16 +10,15 @@ import com.doc.biz.service.IDocDirLevelService;
 import com.doc.biz.service.IDocDirService;
 import com.doc.biz.service.IDocFavoriteService;
 import com.doc.biz.service.IDocSpaceService;
+import com.doc.common.core.domain.entity.SysRole;
 import com.doc.common.utils.DateUtils;
 import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 文档目录管理Service业务层处理
@@ -202,23 +201,53 @@ public class DocDirServiceImpl implements IDocDirService {
         List<DocSpace> spaceList = docSpaceService.getSpaceByUser(userId);
         result.put("space", spaceList);
         List<Long> spaceIds = new ArrayList<>();
+        List<DocDir> dirs = new ArrayList<>();
         spaceList.forEach(space -> {
             if (StringUtils.isEmpty(type) || type.equals(space.getSpaceType())) {
                 spaceIds.add(space.getSpaceId());
+
+                DocDir dir = new DocDir();
+                dir.setSpaceId(space.getSpaceId());
+
+                addRole(dir, space.getSpaceType());
+                dirs.addAll(docDirMapper.selectDocDirList(dir));
+
             }
         });
-        result.put("dir", docDirMapper.selectDirByUser(spaceIds, userId));
+        result.put("dir", dirs);
         return result;
     }
 
+
     /**
-     * 根据权限控制查询目录列表
+     * 添加公共目录和部门目录权限控制
      *
-     * @param docDir 对象
-     * @return 结果
+     * @param dir  目录
+     * @param type 空间类型
      */
     @Override
-    public List<DocDir> selectDocDirList4type(DocDir docDir) {
-        return null;
+    public void addRole(DocDir dir, String type) {
+        String pubKey = "1";
+        String deptKey = "2";
+        if (!pubKey.equals(type) && !deptKey.equals(type)) {
+            //如果是个人目录,则直接返回
+            return;
+        }
+        String pubRole = "system";
+        String deptRole = "dept";
+        //如果不是个人空间,则需要按权限
+        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
+        Set<String> roleKeys = roles.stream().map(SysRole::getRoleKey).collect(Collectors.toSet());
+        //如果是公共空间,且不为系统管理员
+        boolean pubFlag = pubKey.equals(type) && !roleKeys.contains(pubRole);
+        //如果是部门空间,且不为部门管理员
+        boolean deptFlag = deptKey.equals(type) && !roleKeys.contains(deptRole);
+        if (pubFlag || deptFlag) {
+            //则需要判断组织目录是否有权限访问
+            Map<String, Object> params = new HashMap<>(4);
+            params.put("flag", 1);
+            params.put("uid", SecurityUtils.getUserId());
+            dir.setParams(params);
+        }
     }
 }

+ 0 - 15
doc-biz/src/main/resources/mapper/biz/DocDirMapper.xml

@@ -66,21 +66,6 @@
         <include refid="selectDocDirVo"/>
         where DIR_ID = #{dirId}
     </select>
-    <select id="selectDirByUser" resultType="com.doc.biz.domain.DocDir">
-        <include refid="selectDocDirVo"/>
-        WHERE space_id IN
-        <foreach collection="spaceIds" open="(" separator="," close=")" item="spaceId">
-            #{spaceId}
-        </foreach>
-        AND (
-        dir_type = '1' OR (
-        dir_type = '2' AND dir_id IN
-        (
-        SELECT dir_id FROM doc_dir_user WHERE user_id = #{userId}
-        )
-        )
-        )
-    </select>
 
     <insert id="insertDocDir" parameterType="DocDir" useGeneratedKeys="true" keyProperty="dirId">
         insert into doc_dir