From 702a2edf4f4ec9bcd1ad2b372aef006f5d35f338 Mon Sep 17 00:00:00 2001 From: zhouhao Date: Mon, 10 Jul 2023 16:42:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ClearUserAuthorizationCacheEvent?= =?UTF-8?q?=E5=8F=AF=E6=89=8B=E5=8A=A8=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClearUserAuthorizationCacheEvent.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/event/ClearUserAuthorizationCacheEvent.java b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/event/ClearUserAuthorizationCacheEvent.java index 685838bbd..d550e07c2 100644 --- a/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/event/ClearUserAuthorizationCacheEvent.java +++ b/hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/event/ClearUserAuthorizationCacheEvent.java @@ -2,8 +2,10 @@ package org.hswebframework.web.system.authorization.api.event; import lombok.Getter; import org.hswebframework.web.event.DefaultAsyncEvent; +import org.reactivestreams.Publisher; import org.springframework.context.ApplicationEventPublisher; import reactor.core.publisher.Mono; +import reactor.util.context.Context; import java.util.Arrays; import java.util.Collection; @@ -23,6 +25,26 @@ public class ClearUserAuthorizationCacheEvent extends DefaultAsyncEvent { private boolean async; + private static final String DISABLE_KEY = ClearUserAuthorizationCacheEvent.class + "_Disabled"; + + public static Mono disable(Mono task) { + return task.contextWrite(Context.of(DISABLE_KEY, true)); + } + + public static Mono doOnEnabled(Mono task) { + return Mono.deferContextual(ctx -> { + if (ctx.hasKey(DISABLE_KEY)) { + return Mono.empty(); + } + return task; + }); + } + + @Override + public synchronized void async(Publisher publisher) { + super.async(doOnEnabled(Mono.fromDirect(publisher).then())); + } + public static ClearUserAuthorizationCacheEvent of(Collection collection) { ClearUserAuthorizationCacheEvent event = new ClearUserAuthorizationCacheEvent(); if (collection == null || collection.isEmpty()) {