AE86 пре 2 година
родитељ
комит
2b5ff438f1

+ 19 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/enums/UserEnum.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/enums/UserRoleEnum.java

@@ -1,5 +1,7 @@
 package org.dbsyncer.biz.enums;
 
+import org.dbsyncer.common.util.StringUtil;
+
 /**
  * 用户角色枚举
  *
@@ -7,7 +9,7 @@ package org.dbsyncer.biz.enums;
  * @version 1.0.0
  * @date 2022/11/18 23:21
  */
-public enum UserEnum {
+public enum UserRoleEnum {
 
     /**
      * 管理员
@@ -23,7 +25,7 @@ public enum UserEnum {
 
     private String name;
 
-    UserEnum(String code, String name) {
+    UserRoleEnum(String code, String name) {
         this.code = code;
         this.name = name;
     }
@@ -38,6 +40,21 @@ public enum UserEnum {
         return ADMIN.getCode().equals(roleCode);
     }
 
+    /**
+     * 获取角色名称
+     *
+     * @param roleCode
+     * @return
+     */
+    public static String getNameByCode(String roleCode) {
+        for (UserRoleEnum u : UserRoleEnum.values()) {
+            if (StringUtil.equals(roleCode, u.getCode())) {
+                return u.getName();
+            }
+        }
+        return "";
+    }
+
     public String getCode() {
         return code;
     }

+ 9 - 8
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/UserServiceImpl.java

@@ -3,7 +3,7 @@ package org.dbsyncer.biz.impl;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.UserService;
 import org.dbsyncer.biz.checker.impl.user.UserConfigChecker;
-import org.dbsyncer.biz.enums.UserEnum;
+import org.dbsyncer.biz.enums.UserRoleEnum;
 import org.dbsyncer.biz.vo.UserInfoVo;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.SHA1Util;
@@ -59,11 +59,11 @@ public class UserServiceImpl implements UserService {
         // 验证当前登录用户合法身份(必须是管理员操作)
         UserConfig userConfig = getUserConfig();
         UserInfo currentUser = userConfig.getUserInfo(params.get(UserService.CURRENT_USER_NAME));
-        Assert.isTrue(null == currentUser || UserEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
+        Assert.isTrue(null == currentUser || UserRoleEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
         // 新用户合法性(用户不能重复)
         Assert.isNull(userConfig.getUserInfo(username), "用户已存在");
         // 注册新用户
-        userConfig.getUserInfoList().add(new UserInfo(username, nickname, SHA1Util.b64_sha1(password), UserEnum.USER.getCode()));
+        userConfig.getUserInfoList().add(new UserInfo(username, nickname, SHA1Util.b64_sha1(password), UserRoleEnum.USER.getCode()));
 
         return manager.editUserConfig(userConfig);
     }
@@ -79,7 +79,7 @@ public class UserServiceImpl implements UserService {
         // 验证当前登录用户合法身份(管理员或本人操作)
         UserConfig userConfig = getUserConfig();
         UserInfo currentUser = userConfig.getUserInfo(params.get(UserService.CURRENT_USER_NAME));
-        boolean admin = null != currentUser && UserEnum.isAdmin(currentUser.getRoleCode());
+        boolean admin = null != currentUser && UserRoleEnum.isAdmin(currentUser.getRoleCode());
         boolean self = null != currentUser && StringUtil.equals(currentUser.getUsername(), username);
         Assert.isTrue(admin || self, "No permission.");
 
@@ -117,7 +117,7 @@ public class UserServiceImpl implements UserService {
         // 验证当前登录用户合法身份(必须是管理员操作)
         UserConfig userConfig = getUserConfig();
         UserInfo currentUser = userConfig.getUserInfo(params.get(UserService.CURRENT_USER_NAME));
-        Assert.isTrue(UserEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
+        Assert.isTrue(UserRoleEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
 
         // 删除用户
         UserInfo deleteUser = userConfig.getUserInfo(username);
@@ -155,8 +155,8 @@ public class UserServiceImpl implements UserService {
             }
 
             UserConfig userConfig = (UserConfig) userConfigChecker.checkAddConfigModel(new HashMap<>());
-            UserEnum admin = UserEnum.ADMIN;
-            userConfig.getUserInfoList().add(new UserInfo(username, admin.getName(), password, admin.getCode()));
+            UserRoleEnum admin = UserRoleEnum.ADMIN;
+            userConfig.getUserInfoList().add(new UserInfo(username, username, password, admin.getCode()));
             manager.addUserConfig(userConfig);
             return userConfig;
         }
@@ -166,7 +166,8 @@ public class UserServiceImpl implements UserService {
         UserInfoVo userInfoVo = new UserInfoVo();
         BeanUtils.copyProperties(userInfo, userInfoVo);
         // 避免密码直接暴露
-        userInfoVo.setPassword("");
+        userInfoVo.setPassword("***");
+        userInfoVo.setRoleName(UserRoleEnum.getNameByCode(userInfo.getRoleCode()));
         return userInfoVo;
     }
 

+ 13 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/UserInfoVo.java

@@ -8,4 +8,17 @@ import org.dbsyncer.parser.model.UserInfo;
  * @date 2022/11/17 0:14
  */
 public class UserInfoVo extends UserInfo {
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    public String getRoleName() {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName) {
+        this.roleName = roleName;
+    }
 }

+ 0 - 51
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/pwd/PwdController.java

@@ -1,51 +0,0 @@
-package org.dbsyncer.web.controller.pwd;
-
-import org.dbsyncer.biz.ConfigService;
-import org.dbsyncer.biz.vo.RestResult;
-import org.dbsyncer.web.controller.BaseController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-
-/**
- * 密码修改处理
- * @ClassName: PwdController
- * @author AE86
- * @date: 2017年7月7日 上午10:03:33
- */
-@Controller
-@RequestMapping(value = "/pwd")
-public class PwdController extends BaseController {
-
-	private final Logger logger = LoggerFactory.getLogger(getClass());
-
-	@Autowired
-	private ConfigService configService;
-
-	@RequestMapping("")
-	public String index(ModelMap model) {
-		model.put("config", configService.getConfig());
-		return "pwd/pwd";
-	}
-
-	@PostMapping("/edit")
-	@ResponseBody
-	public RestResult edit(HttpServletRequest request) {
-		try {
-			Map<String, String> params = getParams(request);
-			return RestResult.restSuccess(configService.edit(params));
-		} catch (Exception e) {
-			logger.error(e.getLocalizedMessage(), e.getClass());
-			return RestResult.restFail(e.getMessage());
-		}
-	}
-
-}

+ 101 - 0
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/user/UserController.java

@@ -0,0 +1,101 @@
+package org.dbsyncer.web.controller.user;
+
+import org.dbsyncer.biz.UserService;
+import org.dbsyncer.biz.vo.RestResult;
+import org.dbsyncer.web.controller.BaseController;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * 用户信息管理
+ *
+ * @author AE86
+ * @ClassName: UserController
+ * @date: 2017年7月7日 上午10:03:33
+ */
+@Controller
+@RequestMapping(value = "/user")
+public class UserController extends BaseController {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private UserService userService;
+
+    @RequestMapping("")
+    public String index(ModelMap model) {
+        model.put("currentUser", userService.getUserInfoVo(getUserName()));
+        model.put("users", userService.getUserInfoAll(getUserName()));
+        return "user/user";
+    }
+
+    @GetMapping("/getUserInfo.json")
+    @ResponseBody
+    public RestResult getUserInfo() {
+        return RestResult.restSuccess(userService.getUserInfoVo(getUserName()));
+    }
+
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    public RestResult add(HttpServletRequest request) {
+        try {
+            Map<String, String> params = getParamsWithUserName(request);
+            return RestResult.restSuccess(userService.add(params));
+        } catch (Exception e) {
+            logger.error(e.getLocalizedMessage(), e);
+            return RestResult.restFail(e.getMessage());
+        }
+    }
+
+    @RequestMapping(value = "/edit")
+    @ResponseBody
+    public RestResult edit(HttpServletRequest request) {
+        try {
+            Map<String, String> params = getParamsWithUserName(request);
+            return RestResult.restSuccess(userService.edit(params));
+        } catch (Exception e) {
+            logger.error(e.getLocalizedMessage(), e);
+            return RestResult.restFail(e.getMessage());
+        }
+    }
+
+    @PostMapping("/remove")
+    @ResponseBody
+    public RestResult remove(HttpServletRequest request) {
+        try {
+            Map<String, String> params = getParamsWithUserName(request);
+            return RestResult.restSuccess(userService.remove(params));
+        } catch (Exception e) {
+            logger.error(e.getLocalizedMessage(), e);
+            return RestResult.restFail(e.getMessage());
+        }
+    }
+
+    private Map<String, String> getParamsWithUserName(HttpServletRequest request) {
+        Map<String, String> params = getParams(request);
+        params.put(UserService.CURRENT_USER_NAME, getUserName());
+        return params;
+    }
+
+    private String getUserName() {
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        String username = authentication.getName();
+        Assert.hasText(username, "无法获取登录用户.");
+        return username;
+    }
+
+
+}

+ 3 - 5
dbsyncer-web/src/main/resources/public/nav.html

@@ -13,15 +13,13 @@
                         class="fa fa-tachometer"></span>驱动</a>
                 </li>
                 <li><a href="javascript:void(0);" url="/monitor"><span class="fa fa-line-chart"></span>监控</a></li>
-                <li><a href="javascript:void(0);" url="/plugin"><span class="fa fa-puzzle-piece"
-                                                                      aria-hidden="true"></span>插件</a></li>
+                <li><a href="javascript:void(0);" url="/plugin"><span class="fa fa-puzzle-piece" aria-hidden="true"></span>插件</a></li>
                 <li class="dropdown">
                     <a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown">配置<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         <li><a href="javascript:void(0);" url="/system"><span class="fa fa-cog"></span>系统参数</a></li>
-                        <li><a href="javascript:void(0);" url="/pwd"><span class="fa fa-lock"></span>修改密码</a></li>
-                        <li><a href="javascript:void(0);" url="/config"><span class="fa fa-file"
-                                                                              aria-hidden="true"></span>配置管理</a></li>
+                        <li><a href="javascript:void(0);" url="/user"><span class="fa fa-users"></span>用户管理</a></li>
+                        <li><a href="javascript:void(0);" url="/config"><span class="fa fa-file" aria-hidden="true"></span>配置管理</a></li>
                     </ul>
                 </li>
             </ul>

+ 0 - 49
dbsyncer-web/src/main/resources/public/pwd/pwd.html

@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
-
-<div class="container">
-    <form id="configEditForm" class="form-horizontal" role="form">
-        <div class="row text-center">
-            <div class="page-header">
-                <h3>修改密码</h3>
-            </div>
-        </div>
-
-        <!-- 操作 -->
-        <div class="row">
-            <div class="col-md-3">
-                <!-- 隐藏表单值 -->
-                <div class="form-group hidden">
-                    <input name="id" type="text" th:value="${config?.id}"/>
-                </div>
-            </div>
-            <div class="col-md-6">
-                <div class="form-group">
-                    <label class="col-sm-4 control-label">原密码 <strong class="driverVerifcateRequired">*</strong></label>
-                    <div class="col-sm-8">
-                        <input type="password" class="form-control" name="oldPwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入原密码">
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label class="col-sm-4 control-label">新密码 <strong class="driverVerifcateRequired">*</strong></label>
-                    <div class="col-sm-8">
-                        <input type="password" class="form-control" name="newPwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入新密码">
-                    </div>
-                </div>
-                <div class="form-group">
-                    <div class="text-right col-sm-4"></div>
-                    <div class="text-right col-sm-8">
-                        <button id="updatePwdSubBtn" type="button" class="btn btn-primary">
-                            <span class="fa fa-save"></span>保存
-                        </button>
-                    </div>
-                </div>
-            </div>
-            <div class="col-md-3"></div>
-        </div>
-    </form>
-</div>
-
-<script th:src="@{/js/pwd/index.js}"></script>
-</html>

+ 44 - 0
dbsyncer-web/src/main/resources/public/user/user.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
+
+<div class="container">
+    <form id="configEditForm" class="form-horizontal" role="form">
+        <div class="row text-center">
+            <div class="page-header">
+                <h3>用户管理</h3>
+            </div>
+        </div>
+
+        <!-- 操作 -->
+        <div class="row">
+            <div class="col-md-12">
+                <table class="table table-hover">
+                    <thead>
+                    <tr>
+                        <th>序号</th>
+                        <th>用户</th>
+                        <th>昵称</th>
+                        <th>角色</th>
+                        <th>密码</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="userList">
+                    <tr th:id="${u?.username}" th:each="u,state : ${users}">
+                        <td th:text="${state.count}"/>
+                        <td th:text="${u?.username}"/>
+                        <td th:text="${u?.nickname}"/>
+                        <td th:text="${u?.roleName}"/>
+                        <td th:text="${u?.password}"/>
+                        <td th:text="修改"/>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </form>
+</div>
+
+<script th:src="@{/js/user/index.js}"></script>
+</html>

+ 3 - 3
dbsyncer-web/src/main/resources/static/js/pwd/index.js → dbsyncer-web/src/main/resources/static/js/user/index.js

@@ -1,19 +1,19 @@
 function submit(data) {
-    doPoster('/pwd/edit', data, function (data) {
+    doPoster('/user/add', data, function (data) {
         if (data.success == true) {
             doPoster("/logout", null, function (data) {
                 location.href = $basePath;
             });
         } else {
             bootGrowl(data.resultValue, "danger");
-            doLoader("/pwd");
+            doLoader("/user");
         }
     });
 }
 
 $(function () {
     //保存
-    $("#updatePwdSubBtn").click(function () {
+    $("#updateUserBtn").click(function () {
         var $form = $("#configEditForm");
         if ($form.formValidate() == true) {
             var data = $form.serializeJson();