All Downloads are FREE. Search and download functionalities are using the official Maven repository.

love.keeping.starter.web.components.security.CheckPermissionHandlerImpl Maven / Gradle / Ivy

The newest version!
package love.keeping.starter.web.components.security;

import love.keeping.starter.common.utils.ArrayUtil;
import love.keeping.starter.common.utils.CollectionUtil;
import love.keeping.starter.common.utils.StringUtil;
import love.keeping.starter.web.common.security.AbstractUserDetails;
import love.keeping.starter.web.common.security.SecurityUtil;
import java.util.Arrays;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;

/**
 * 权限验证实现
 *
 * @author Keeping
 */
@Slf4j
public class CheckPermissionHandlerImpl implements CheckPermissionHandler {

  @Override
  public boolean valid(PermissionCalcType calcType, String... permissions) {
    if (ArrayUtil.isEmpty(permissions)) {
      return false;
    }

    AbstractUserDetails user = SecurityUtil.getCurrentUser();
    if (user == null) {
      return false;
    }

    if (user.hasAdminPermission()) {
      if (log.isDebugEnabled()) {
        log.debug("当前用户是管理员,通过权限校验");
      }
      return true;
    }
    Set permissionSet = user.getPermissions();

    boolean valid = CollectionUtil.isNotEmpty(permissionSet)
        && (calcType == PermissionCalcType.OR ?
        Arrays.stream(permissions).anyMatch(
            pattern -> permissionSet.stream().anyMatch(item -> StringUtil.strMatch(pattern, item)))
        : Arrays.stream(permissions).allMatch(
            pattern -> permissionSet.stream()
                .anyMatch(item -> StringUtil.strMatch(pattern, item))));

    if (log.isDebugEnabled()) {
      log.debug("当前用户权限={}, 需要权限={}, 是否通过权限校验={}", permissionSet, permissions,
          valid);
    }

    return valid;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy