瀏覽代碼

优化权限缓存清空逻辑

zhou-hao 5 年之前
父節點
當前提交
686b197505

+ 5 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/configuration/AuthorizationServiceAutoConfiguration.java

@@ -62,6 +62,11 @@ public class AuthorizationServiceAutoConfiguration {
         public DefaultAuthorizationSettingService defaultAuthorizationSettingService(){
             return new DefaultAuthorizationSettingService();
         }
+
+        @Bean
+        public DefaultPermissionService defaultPermissionService(){
+            return new DefaultPermissionService();
+        }
     }
 
 

+ 50 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/DefaultPermissionService.java

@@ -0,0 +1,50 @@
+package org.hswebframework.web.system.authorization.defaults.service;
+
+import org.hswebframework.ezorm.rdb.mapping.ReactiveDelete;
+import org.hswebframework.ezorm.rdb.mapping.ReactiveUpdate;
+import org.hswebframework.ezorm.rdb.mapping.defaults.SaveResult;
+import org.hswebframework.web.crud.service.GenericReactiveCrudService;
+import org.hswebframework.web.system.authorization.api.entity.PermissionEntity;
+import org.hswebframework.web.system.authorization.api.event.ClearUserAuthorizationCacheEvent;
+import org.reactivestreams.Publisher;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
+import reactor.core.publisher.Mono;
+
+public class DefaultPermissionService extends GenericReactiveCrudService<PermissionEntity, String> {
+
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
+
+    @Override
+    public Mono<SaveResult> save(Publisher<PermissionEntity> entityPublisher) {
+        return super.save(entityPublisher)
+                .doOnSuccess(r -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of()));
+    }
+
+    @Override
+    public Mono<Integer> updateById(String id, Mono<PermissionEntity> entityPublisher) {
+        return super.updateById(id, entityPublisher)
+                .doOnSuccess(r -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of()));
+    }
+
+    @Override
+    public Mono<Integer> deleteById(Publisher<String> idPublisher) {
+        return super.deleteById(idPublisher)
+                .doOnSuccess(r -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of()));
+    }
+
+    @Override
+    public ReactiveDelete createDelete() {
+        return super.createDelete()
+                .onExecute(i -> i.doOnSuccess(r -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of())));
+    }
+
+    @Override
+    public ReactiveUpdate<PermissionEntity> createUpdate() {
+        return super.createUpdate()
+                .onExecute(i -> i.doOnSuccess(r -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of())));
+    }
+
+
+}

+ 8 - 13
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/webflux/WebFluxPermissionController.java

@@ -1,20 +1,15 @@
 package org.hswebframework.web.system.authorization.defaults.webflux;
 
 import org.apache.commons.collections.CollectionUtils;
-import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
-import org.hswebframework.ezorm.rdb.mapping.defaults.SaveResult;
-import org.hswebframework.web.api.crud.entity.QueryParamEntity;
-import org.hswebframework.web.authorization.Permission;
 import org.hswebframework.web.authorization.annotation.Authorize;
 import org.hswebframework.web.authorization.annotation.QueryAction;
 import org.hswebframework.web.authorization.annotation.Resource;
-import org.hswebframework.web.crud.web.reactive.ReactiveCrudController;
-import org.hswebframework.web.exception.NotFoundException;
+import org.hswebframework.web.crud.service.ReactiveCrudService;
+import org.hswebframework.web.crud.web.reactive.ReactiveServiceCrudController;
 import org.hswebframework.web.system.authorization.api.entity.PermissionEntity;
-import org.reactivestreams.Publisher;
+import org.hswebframework.web.system.authorization.defaults.service.DefaultPermissionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 import java.util.List;
@@ -23,14 +18,14 @@ import java.util.List;
 @RequestMapping("/permission")
 @Authorize
 @Resource(id = "permission",name = "权限管理",group = "system")
-public class WebFluxPermissionController implements ReactiveCrudController<PermissionEntity,String> {
+public class WebFluxPermissionController implements ReactiveServiceCrudController<PermissionEntity,String> {
 
     @Autowired
-    private ReactiveRepository<PermissionEntity, String> repository;
+    private DefaultPermissionService permissionService;
 
     @Override
-    public ReactiveRepository<PermissionEntity, String> getRepository() {
-        return repository;
+    public ReactiveCrudService<PermissionEntity, String> getService() {
+        return permissionService;
     }
 
     @PutMapping("/status/{status}")
@@ -39,7 +34,7 @@ public class WebFluxPermissionController implements ReactiveCrudController<Permi
 
         return Mono.just(idList)
                 .filter(CollectionUtils::isNotEmpty)
-                .flatMap(list -> repository.createUpdate()
+                .flatMap(list -> permissionService.createUpdate()
                         .set(PermissionEntity::getStatus, status)
                         .where()
                         .in(PermissionEntity::getId, list)