diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java index f92799c..bbc22ab 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java @@ -1,10 +1,8 @@ package com.bonus.common.security.auth; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; +import cn.hutool.json.JSONObject; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.utils.DateUtils; @@ -146,17 +144,32 @@ public class AuthLogic */ public void checkPermi(RequiresPermissions requiresPermissions, ProceedingJoinPoint joinPoint) { - SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ",")); - if (requiresPermissions.logical() == Logical.AND) { - try{ - checkPermiAnd(requiresPermissions.value()); - }catch (Exception e){ - //记录越权日志 - addErrorLogs(joinPoint,requiresPermissions); - throw new NotPermissionException(requiresPermissions.value()[0]); + //获取请求参数 + boolean needPermission = true; + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + Object obj = args[i]; + if (Objects.nonNull(obj) && obj instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) obj; + if ("1".equals(jsonObject.getStr("skipPermission"))) { + needPermission = false; + } + } + } + + if (needPermission) { + SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ",")); + if (requiresPermissions.logical() == Logical.AND) { + try { + checkPermiAnd(requiresPermissions.value()); + } catch (Exception e) { + //记录越权日志 + addErrorLogs(joinPoint, requiresPermissions); + throw new NotPermissionException(requiresPermissions.value()[0]); + } + } else { + checkPermiOr(requiresPermissions.value()); } - } else { - checkPermiOr(requiresPermissions.value()); } }