zhou-hao 4 years ago
parent
commit
9233e89063

+ 1 - 1
hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/define/DefaultBasicAuthorizeDefinition.java

@@ -36,7 +36,7 @@ public class DefaultBasicAuthorizeDefinition implements AopAuthorizeDefinition {
     private ResourcesDefinition resources = new ResourcesDefinition();
     private DimensionsDefinition dimensions = new DimensionsDefinition();
 
-    private String message;
+    private String message = "权限不足,拒绝访问";
 
     private Phased phased;
 

+ 3 - 3
hsweb-starter/src/main/java/org/hswebframework/web/starter/initialize/SystemInitialize.java

@@ -28,11 +28,11 @@ import java.util.stream.Collectors;
  * @author zhouhao
  */
 public class SystemInitialize {
-    private Logger logger = LoggerFactory.getLogger(SystemInitialize.class);
+    private final Logger logger = LoggerFactory.getLogger(SystemInitialize.class);
 
-    private DatabaseOperator database;
+    private final DatabaseOperator database;
     //将要安装的信息
-    private SystemVersion targetVersion;
+    private final SystemVersion targetVersion;
 
     //已安装的信息
     private SystemVersion installed;

+ 12 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/entity/DimensionUserEntity.java

@@ -9,6 +9,8 @@ import org.hswebframework.ezorm.rdb.mapping.annotation.EnumCodec;
 import org.hswebframework.web.api.crud.entity.GenericEntity;
 import org.hswebframework.web.dict.EnumDict;
 import org.hswebframework.web.system.authorization.api.enums.DimensionUserFeature;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.Column;
 import javax.persistence.Index;
@@ -68,6 +70,16 @@ public class DimensionUserEntity extends GenericEntity<String> {
     @Schema(description = "其他功能")
     private DimensionUserFeature[] features;
 
+    public void generateId() {
+        if (StringUtils.isEmpty(getId())) {
+            String id = DigestUtils
+                    .md5DigestAsHex(String.format("%s-%s-%s",
+                                                  dimensionTypeId,
+                                                  dimensionId, userId).getBytes());
+            setId(id);
+        }
+    }
+
     public boolean hasFeature(DimensionUserFeature feature) {
         return features != null && EnumDict.in(feature, features);
     }

+ 29 - 22
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/DefaultDimensionUserService.java

@@ -1,10 +1,12 @@
 package org.hswebframework.web.system.authorization.defaults.service;
 
 import lombok.extern.slf4j.Slf4j;
+import org.hswebframework.ezorm.rdb.exception.DuplicateKeyException;
 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.exception.BusinessException;
 import org.hswebframework.web.system.authorization.api.entity.DimensionUserEntity;
 import org.hswebframework.web.system.authorization.api.event.ClearUserAuthorizationCacheEvent;
 import org.hswebframework.web.system.authorization.api.event.UserDeletedEvent;
@@ -35,8 +37,9 @@ public class DefaultDimensionUserService extends GenericReactiveCrudService<Dime
     @Override
     public Mono<SaveResult> save(Publisher<DimensionUserEntity> entityPublisher) {
         return Flux.from(entityPublisher)
-                .doOnNext(entity -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of(entity.getUserId())))
-                .as(super::save);
+                   .doOnNext(DimensionUserEntity::generateId)
+                   .doOnNext(entity -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of(entity.getUserId())))
+                   .as(super::save);
     }
 
     @Override
@@ -49,18 +52,21 @@ public class DefaultDimensionUserService extends GenericReactiveCrudService<Dime
     @Override
     public Mono<Integer> insert(Publisher<DimensionUserEntity> entityPublisher) {
         return Flux.from(entityPublisher)
-                .doOnNext(entity -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of(entity.getUserId())))
-                .as(super::insert);
+                   .doOnNext(DimensionUserEntity::generateId)
+                   .doOnNext(entity -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of(entity.getUserId())))
+                   .as(super::insert)
+                   .onErrorMap(DuplicateKeyException.class, (err) -> new BusinessException("重复的绑定请求"));
     }
 
     @Override
     public Mono<Integer> insertBatch(Publisher<? extends Collection<DimensionUserEntity>> entityPublisher) {
         return Flux.from(entityPublisher)
-                .doOnNext(entity -> eventPublisher.publishEvent(ClearUserAuthorizationCacheEvent.of(entity
-                        .stream()
-                        .map(DimensionUserEntity::getUserId)
-                        .collect(Collectors.toSet()))))
-                .as(super::insertBatch);
+                   .doOnNext(entity -> eventPublisher
+                           .publishEvent(ClearUserAuthorizationCacheEvent
+                                                 .of(entity.stream()
+                                                           .map(DimensionUserEntity::getUserId)
+                                                           .collect(Collectors.toSet()))))
+                   .as(super::insertBatch);
     }
 
     @Override
@@ -75,24 +81,25 @@ public class DefaultDimensionUserService extends GenericReactiveCrudService<Dime
     @SuppressWarnings("all")
     public ReactiveUpdate<DimensionUserEntity> createUpdate() {
         return super.createUpdate()
-                .onExecute((update, r) -> r.doOnSuccess(i -> {
-                    createQuery()
-                            .select(DimensionUserEntity::getUserId)
-                            .setParam(update.toQueryParam())
-                            .fetch()
-                            .map(DimensionUserEntity::getUserId)
-                            .collectList()
-                            .map(ClearUserAuthorizationCacheEvent::of)
-                            .subscribe();
-                }));
+                    .onExecute((update, r) -> r
+                            .doOnSuccess(i -> {
+                                this.createQuery()
+                                    .select(DimensionUserEntity::getUserId)
+                                    .setParam(update.toQueryParam())
+                                    .fetch()
+                                    .map(DimensionUserEntity::getUserId)
+                                    .collectList()
+                                    .map(ClearUserAuthorizationCacheEvent::of)
+                                    .subscribe();
+                            }));
     }
 
     @Override
     @SuppressWarnings("all")
     public ReactiveDelete createDelete() {
         return super.createDelete()
-                .onExecute((delete, r) -> r.doOnSuccess(i -> {
-                    createQuery()
+                    .onExecute((delete, r) -> r.doOnSuccess(i -> {
+                        this.createQuery()
                             .select(DimensionUserEntity::getUserId)
                             .setParam(delete.toQueryParam())
                             .fetch()
@@ -100,6 +107,6 @@ public class DefaultDimensionUserService extends GenericReactiveCrudService<Dime
                             .collectList()
                             .map(ClearUserAuthorizationCacheEvent::of)
                             .subscribe();
-                }));
+                    }));
     }
 }