Преглед изворни кода

Merge remote-tracking branch 'origin/master'

zhou-hao пре 7 година
родитељ
комит
ecacbef95d
10 измењених фајлова са 318 додато и 14 уклоњено
  1. 2 2
      hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java
  2. 63 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-controller/src/main/java/org/hswebframework/web/controller/authorization/UserSettingController.java
  3. 11 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-api/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java
  4. 70 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/authorization/UserSettingMapper.xml
  5. 41 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-entity/src/main/java/org/hswebframework/web/entity/authorization/UserSettingEntity.java
  6. 16 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-api/src/main/java/org/hswebframework/web/service/authorization/UserSettingService.java
  7. 94 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-simple/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java
  8. 6 6
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AutoSyncPermission.java
  9. 12 0
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/resources/hsweb-starter.js
  10. 3 6
      hsweb-system/hsweb-system-file/hsweb-system-file-controller/src/main/java/org/hswebframework/web/controller/file/FileController.java

+ 2 - 2
hsweb-commons/hsweb-commons-service/hsweb-commons-service-simple/src/main/java/org/hswebframework/web/service/GenericEntityService.java

@@ -53,8 +53,8 @@ public abstract class GenericEntityService<E extends GenericEntity<PK>, PK>
      */
     protected abstract IDGenerator<PK> getIDGenerator();
 
-    @Override
-    public abstract CrudDao<E, PK> getDao();
+//    @Override
+//    public abstract CrudDao<E, PK> getDao();
 
     @Override
     public int deleteByPk(PK pk) {

+ 63 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-controller/src/main/java/org/hswebframework/web/controller/authorization/UserSettingController.java

@@ -0,0 +1,63 @@
+package org.hswebframework.web.controller.authorization;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.hswebframework.web.authorization.Authentication;
+import org.hswebframework.web.authorization.annotation.Authorize;
+import org.hswebframework.web.controller.message.ResponseMessage;
+import org.hswebframework.web.entity.authorization.UserSettingEntity;
+import org.hswebframework.web.service.authorization.UserSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@RestController
+@RequestMapping("/user-setting")
+@Authorize//(permission = "user-setting", description = "用户配置管理")
+@Api(value = "用户配置管理", tags = "用户-用户配置管理")
+public class UserSettingController {
+
+    @Autowired
+    private UserSettingService userSettingService;
+
+    @GetMapping("/me/{key}/{id}")
+    @Authorize(merge = false)
+    @ApiOperation("获取当前用户的配置")
+    public ResponseMessage<UserSettingEntity> get(Authentication authentication,
+                                                  @PathVariable String key,
+                                                  @PathVariable String id) {
+        return ResponseMessage.ok(userSettingService.selectByUser(authentication.getUser().getId(), key, id));
+    }
+
+    @GetMapping("/me/{key}")
+    @Authorize(merge = false)
+    @ApiOperation("获取当前用户的配置列表")
+    public ResponseMessage<List<UserSettingEntity>> get(Authentication authentication,
+                                                       @PathVariable String key) {
+        return ResponseMessage.ok(userSettingService.selectByUser(authentication.getUser().getId(), key));
+    }
+
+    @PatchMapping("/me/{key}")
+    @Authorize(merge = false)
+    @ApiOperation("获取当前用户的配置列表")
+    public ResponseMessage<String> save(Authentication authentication,
+                                       @PathVariable String key,
+                                       @Validated
+                                       @RequestBody UserSettingEntity userSettingEntity) {
+        userSettingEntity.setId(null);
+        userSettingEntity.setUserId(authentication.getUser().getId());
+        userSettingEntity.setKey(key);
+        UserSettingEntity old = userSettingService.selectByUser(authentication.getUser().getId(), key, userSettingEntity.getSettingId());
+        if (old != null) {
+            userSettingEntity.setId(old.getId());
+        }
+        String id = userSettingService.saveOrUpdate(userSettingEntity);
+        return ResponseMessage.ok(id);
+    }
+}

+ 11 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-api/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java

@@ -0,0 +1,11 @@
+package org.hswebframework.web.dao.authorization;
+
+import org.hswebframework.web.dao.CrudDao;
+import org.hswebframework.web.entity.authorization.UserSettingEntity;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+public interface UserSettingDao extends CrudDao<UserSettingEntity, String> {
+}

+ 70 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-dao/hsweb-system-authorization-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/authorization/UserSettingMapper.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Copyright 2016 http://www.hswebframework.org
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  ~
+  -->
+
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.hswebframework.web.dao.authorization.UserSettingDao">
+    <resultMap id="UserSettingResultMap" type="org.hswebframework.web.entity.authorization.UserSettingEntity">
+        <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
+        <result property="key" column="key" javaType="String" jdbcType="VARCHAR"/>
+        <result property="settingId" column="setting_id" javaType="String" jdbcType="VARCHAR"/>
+        <result property="userId" column="user_id" javaType="String" jdbcType="VARCHAR"/>
+        <result property="setting" column="setting" javaType="String" jdbcType="CLOB"/>
+        <result property="describe" column="describe" javaType="String" jdbcType="VARCHAR"/>
+        <result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" javaType="Date" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" javaType="Date" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <!--用于动态生成sql所需的配置-->
+    <sql id="config">
+        <bind name="resultMapId" value="'UserSettingResultMap'"/>
+        <bind name="tableName" value="'s_user_setting'"/>
+    </sql>
+
+    <insert id="insert" parameterType="org.hswebframework.web.entity.authorization.UserSettingEntity">
+        <include refid="config"/>
+        <include refid="BasicMapper.buildInsertSql"/>
+    </insert>
+
+    <delete id="deleteByPk" parameterType="String">
+        delete from s_user_setting where u_id =#{id}
+    </delete>
+
+    <delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
+        <include refid="config"/>
+        <include refid="BasicMapper.buildDeleteSql"/>
+    </delete>
+
+    <update id="update" parameterType="org.hswebframework.web.commons.entity.Entity">
+        <include refid="config"/>
+        <include refid="BasicMapper.buildUpdateSql"/>
+    </update>
+
+    <select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="UserSettingResultMap">
+        <include refid="config"/>
+        <include refid="BasicMapper.buildSelectSql"/>
+    </select>
+
+    <select id="count" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
+        <include refid="config"/>
+        <include refid="BasicMapper.buildTotalSql"/>
+    </select>
+</mapper>

+ 41 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-entity/src/main/java/org/hswebframework/web/entity/authorization/UserSettingEntity.java

@@ -0,0 +1,41 @@
+package org.hswebframework.web.entity.authorization;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.validator.constraints.NotBlank;
+import org.hswebframework.web.commons.entity.SimpleGenericEntity;
+import org.hswebframework.web.validator.group.CreateGroup;
+
+import java.util.Date;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class UserSettingEntity extends SimpleGenericEntity<String> {
+    @NotBlank(groups = CreateGroup.class)
+    private String userId;
+
+    @NotBlank(groups = CreateGroup.class)
+
+    private String key;
+
+    @NotBlank(groups = CreateGroup.class)
+    private String settingId;
+
+    @NotBlank(groups = CreateGroup.class)
+    private String setting;
+
+    private String describe;
+
+    private String name;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+}

+ 16 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-api/src/main/java/org/hswebframework/web/service/authorization/UserSettingService.java

@@ -0,0 +1,16 @@
+package org.hswebframework.web.service.authorization;
+
+import org.hswebframework.web.entity.authorization.UserSettingEntity;
+import org.hswebframework.web.service.CrudService;
+
+import java.util.List;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+public interface UserSettingService extends CrudService<UserSettingEntity, String> {
+    List<UserSettingEntity> selectByUser(String userId, String key);
+
+    UserSettingEntity selectByUser(String userId, String key, String settingId);
+}

+ 94 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-simple/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleUserSettingService.java

@@ -0,0 +1,94 @@
+package org.hswebframework.web.service.authorization.simple;
+
+import org.hswebframework.web.dao.authorization.UserSettingDao;
+import org.hswebframework.web.entity.authorization.UserSettingEntity;
+import org.hswebframework.web.id.IDGenerator;
+import org.hswebframework.web.service.EnableCacheGenericEntityService;
+import org.hswebframework.web.service.authorization.UserSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@Service
+@CacheConfig(cacheNames = "user-setting")
+public class SimpleUserSettingService extends EnableCacheGenericEntityService<UserSettingEntity, String>
+        implements UserSettingService {
+
+    @Autowired
+    private UserSettingDao userSettingDao;
+
+    @Override
+    protected IDGenerator<String> getIDGenerator() {
+        return IDGenerator.MD5;
+    }
+
+    @Override
+    public UserSettingDao getDao() {
+        return userSettingDao;
+    }
+
+    @Override
+    @Cacheable(key = "'user:'+#userId+'.'+#key")
+    public List<UserSettingEntity> selectByUser(String userId, String key) {
+        Objects.requireNonNull(userId);
+        Objects.requireNonNull(key);
+
+        return createQuery().where("userId", userId).and("key", key).listNoPaging();
+    }
+
+    @Override
+    @Cacheable(key = "'user:'+#userId+'.'+#key+'.'+#settingId")
+    public UserSettingEntity selectByUser(String userId, String key, String settingId) {
+        Objects.requireNonNull(userId);
+        Objects.requireNonNull(key);
+        Objects.requireNonNull(settingId);
+        return createQuery().where("userId", userId).and("key", key).and("settingId", settingId).single();
+    }
+
+    @Override
+    @Caching(
+            evict = {
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key+'.'+#entity.settingId"),
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key")
+            }
+    )
+    public String insert(UserSettingEntity entity) {
+        entity.setCreateTime(new Date());
+        entity.setUpdateTime(new Date());
+        return super.insert(entity);
+    }
+
+    @Override
+    @Caching(
+            evict = {
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key+'.'+#entity.settingId"),
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key")
+            }
+    )
+    public String saveOrUpdate(UserSettingEntity entity) {
+        return super.saveOrUpdate(entity);
+    }
+
+    @Override
+    @Caching(
+            evict = {
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key+'.'+#entity.settingId"),
+                    @CacheEvict(key = "'user:'+#entity.userId+'.'+#entity.key")
+            }
+    )
+    public int updateByPk(String id, UserSettingEntity entity) {
+        entity.setUpdateTime(new Date());
+        return super.updateByPk(id, entity);
+    }
+}

+ 6 - 6
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AutoSyncPermission.java

@@ -111,12 +111,13 @@ public class AutoSyncPermission implements ApplicationListener<AuthorizeDefiniti
             if (oldPermission == null) {
                 permissionService.insert(permission);
             } else {
-                List<ActionEntity> oldAction = oldPermission.getActions();
-                if (oldAction == null) {
-                    oldAction = new ArrayList<>();
+                Set<ActionEntity> oldAction = new HashSet<>();
+                if (oldPermission.getActions() != null) {
+                    oldAction.addAll(oldPermission.getActions());
                 }
                 Map<String, ActionEntity> actionCache = oldAction
-                        .stream().collect(Collectors.toMap(ActionEntity::getAction, Function.identity()));
+                        .stream()
+                        .collect(Collectors.toMap(ActionEntity::getAction, Function.identity()));
                 boolean permissionChanged = false;
                 for (ActionEntity actionEntity : permission.getActions()) {
                     //添加新的action到旧的action
@@ -126,10 +127,9 @@ public class AutoSyncPermission implements ApplicationListener<AuthorizeDefiniti
                     }
                 }
                 if (permissionChanged) {
-                    oldPermission.setActions(oldAction);
+                    oldPermission.setActions(new ArrayList<>(oldAction));
                     permissionService.updateByPk(oldPermission.getId(), oldPermission);
                 }
-
                 actionCache.clear();
             }
 

+ 12 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/resources/hsweb-starter.js

@@ -150,6 +150,18 @@ function install(context) {
         .addColumn().name("sort_index").alias("sortIndex").comment("排序序号").jdbcType(java.sql.JDBCType.DECIMAL).length(32, 0).commit()
         .addColumn().name("status").alias("status").comment("状态").jdbcType(java.sql.JDBCType.DECIMAL).length(4, 0).commit()
         .comment("菜单分组关联").commit();
+
+    database.createOrAlter("s_user_setting")
+        .addColumn().name("u_id").varchar(32).notNull().primaryKey().comment("uid").commit()
+        .addColumn().name("name").varchar(128).comment("配置名称").commit()
+        .addColumn().name("describe").varchar(512).comment("说明").commit()
+        .addColumn().name("user_id").varchar(32).notNull().comment("用户ID").commit()
+        .addColumn().name("key").varchar(128).notNull().comment("配置标识").commit()
+        .addColumn().name("setting").clob().comment("配置内容").commit()
+        .addColumn().name("setting_id").varchar(32).notNull().comment("自定义配置id").commit()
+        .addColumn().name("create_time").datetime().notNull().comment("创建时间").commit()
+        .addColumn().name("update_time").datetime().comment("创建时间").commit()
+        .comment("角色表").commit();
 }
 
 //设置依赖

+ 3 - 6
hsweb-system/hsweb-system-file/hsweb-system-file-controller/src/main/java/org/hswebframework/web/controller/file/FileController.java

@@ -53,7 +53,7 @@ import static java.util.Optional.ofNullable;
 @RestController
 @RequestMapping("${hsweb.web.mappings.file:file}")
 @Authorize(permission = "file", description = "文件管理")
-@Api(value = "文件管理",tags = "文件管理-文件操作")
+@Api(value = "文件管理", tags = "文件管理-文件操作")
 @SuppressWarnings("all")
 public class FileController {
 
@@ -75,10 +75,6 @@ public class FileController {
         this.fileInfoService = fileInfoService;
     }
 
-    public static void main(String[] args) {
-        System.out.println(Base64.encodeBase64String("hello".getBytes()));
-    }
-
     /**
      * 构建并下载zip文件.仅支持POST请求
      *
@@ -133,7 +129,8 @@ public class FileController {
     public void downloadTxt(@ApiParam("文件名") @PathVariable("name") String name,
                             @ApiParam("文本内容") @RequestParam("text") String text,
                             HttpServletResponse response) throws IOException {
-        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+        response.setCharacterEncoding("utf-8");
+        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=utf-8");
         response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(name, "utf-8"));
         response.getWriter().write(text);
     }