Prechádzať zdrojové kódy

Fix removeUploadFile role bug

tsurumure 3 mesiacov pred
rodič
commit
3ee4379fb4

+ 3 - 2
src/main/java/com/backendsys/modules/common/config/security/utils/SecurityUtil.java

@@ -126,6 +126,7 @@ public class SecurityUtil {
 
     /**
      * 判断单个用户权限 (超管直接通过)
+     * securityUtil.hasPermission("1.1.6")
      */
     public Boolean hasPermission(String permission) {
         if (isSuper()) return true;
@@ -135,8 +136,8 @@ public class SecurityUtil {
 
     /**
      * 判断是否具备用户权限 (多个) (默认 AND) (超管直接通过)
-     * - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"))
-     * - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR)
+     * - securityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"))
+     * - securityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR)
      * - 注意:权限储存在Token中,更新权限需要重新登录
      */
     public Boolean hasPermissions(List<String> permis, MatchType matchType) {

+ 15 - 7
src/main/java/com/backendsys/modules/upload/controller/SysFileController.java

@@ -7,6 +7,7 @@ import com.backendsys.modules.common.aspect.SysLog;
 import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
+import com.backendsys.modules.common.enums.MatchType;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.upload.entity.SysFile;
 import com.backendsys.modules.upload.entity.SysFileMergeByMd5;
@@ -20,6 +21,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -88,7 +90,6 @@ public class SysFileController {
 
     @SysLog("删除文件")
     @Operation(summary = "删除文件")
-    @PreAuthorize("@sr.hasPermission('1.1.6')")
     @DeleteMapping("/api/upload/removeUploadFile")
     public Result removeUploadFile(@Validated(SysFile.Delete.class) @RequestBody SysFile sysFile) {
 
@@ -99,9 +100,13 @@ public class SysFileController {
 
         // 权限:
         // - 删除自己 (需权限) (1.1.6)
-        // - 删除全部 (需要子权限或超级管理员) (1.1.5)
-        Long user_id = querySysFile.getUser_id();
-        if (user_id.equals(SecurityUtil.getUserId()) && !securityUtil.hasPermission("1.1.5")) {
+        // - 删除其他人 (需要子权限或超级管理员) (1.1.5)
+        Long my_user_id = SecurityUtil.getUserId();
+        Long file_user_id = querySysFile.getUser_id();
+        if (file_user_id.equals(my_user_id) && !securityUtil.hasPermissions(Arrays.asList("1.1.5", "1.1.6"), MatchType.OR)) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+        if (!file_user_id.equals(my_user_id) && !securityUtil.hasPermission("1.1.5")) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
 
@@ -110,7 +115,6 @@ public class SysFileController {
 
     @SysLog("删除文件 (批量)")
     @Operation(summary = "删除文件 (批量)")
-    @PreAuthorize("@sr.hasPermission('1.1.6')")
     @DeleteMapping("/api/upload/removeUploadFileBatch")
     public Result removeUploadFileBatch(@Validated(SysFile.DeleteBatch.class) @RequestBody SysFile sysFile) {
 
@@ -123,9 +127,13 @@ public class SysFileController {
 
         // 权限:
         // - 删除自己 (需权限) (1.1.6)
-        // - 删除全部 (需要子权限或超级管理员) (1.1.5)
+        // - 删除其他人 (需要子权限或超级管理员) (1.1.5)
+        Long my_user_id = SecurityUtil.getUserId();
         List<Long> sysFileListByUserId = querySysFileList.stream().map(SysFile::getUser_id).collect(Collectors.toList());
-        if (sysFileListByUserId.contains(SecurityUtil.getUserId()) && !securityUtil.hasPermission("1.1.5")) {
+        if (sysFileListByUserId.contains(my_user_id) && !securityUtil.hasPermissions(Arrays.asList("1.1.5", "1.1.6"), MatchType.OR)) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+        if (!sysFileListByUserId.contains(my_user_id) && !securityUtil.hasPermission("1.1.5")) {
             throw new CustException(SecurityEnum.NOAUTH);
         }