UserConfigServiceImpl.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package org.dbsyncer.biz.impl;
  2. import org.dbsyncer.biz.BizException;
  3. import org.dbsyncer.biz.UserConfigService;
  4. import org.dbsyncer.biz.checker.impl.user.UserConfigChecker;
  5. import org.dbsyncer.biz.enums.UserRoleEnum;
  6. import org.dbsyncer.biz.vo.UserInfoVo;
  7. import org.dbsyncer.common.util.SHA1Util;
  8. import org.dbsyncer.common.util.StringUtil;
  9. import org.dbsyncer.manager.Manager;
  10. import org.dbsyncer.parser.logger.LogService;
  11. import org.dbsyncer.parser.logger.LogType;
  12. import org.dbsyncer.parser.model.UserConfig;
  13. import org.dbsyncer.parser.model.UserInfo;
  14. import org.springframework.beans.BeanUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.util.Assert;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.stream.Collectors;
  23. /**
  24. * @author AE86
  25. * @version 1.0.0
  26. * @date 2022/11/17 0:16
  27. */
  28. @Service
  29. public class UserConfigServiceImpl implements UserConfigService {
  30. private static final String DEFAULT_USERNAME = "admin";
  31. private static final String DEFAULT_PASSWORD = "0DPiKuNIrrVmD8IUCuw1hQxNqZc=";
  32. @Autowired
  33. private Manager manager;
  34. @Autowired
  35. private UserConfigChecker userConfigChecker;
  36. @Autowired
  37. private LogService logService;
  38. @Override
  39. public synchronized String add(Map<String, String> params) {
  40. String username = params.get("username");
  41. Assert.hasText(username, "The username is null.");
  42. String nickname = params.get("nickname");
  43. Assert.hasText(nickname, "The nickname is null.");
  44. String password = params.get("password");
  45. Assert.hasText(password, "The password is null.");
  46. String mail = params.get("mail");
  47. // 验证当前登录用户合法身份(必须是管理员操作)
  48. UserConfig userConfig = getUserConfig();
  49. UserInfo currentUser = userConfig.getUserInfo(params.get(UserConfigService.CURRENT_USER_NAME));
  50. Assert.isTrue(null == currentUser || UserRoleEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
  51. // 新用户合法性(用户不能重复)
  52. Assert.isNull(userConfig.getUserInfo(username), "用户已存在,请换个账号");
  53. // 注册新用户
  54. userConfig.getUserInfoList().add(new UserInfo(username, nickname, SHA1Util.b64_sha1(password), UserRoleEnum.USER.getCode(), mail));
  55. logService.log(LogType.UserLog.INSERT, String.format("[%s]添加[%s]账号成功", currentUser.getUsername(), username));
  56. return manager.editConfigModel(userConfig);
  57. }
  58. @Override
  59. public synchronized String edit(Map<String, String> params) {
  60. String username = params.get("username");
  61. Assert.hasText(username, "The username is null.");
  62. String nickname = params.get("nickname");
  63. Assert.hasText(nickname, "The nickname is null.");
  64. String newPwd = params.get("newPwd");
  65. String mail = params.get("mail");
  66. // 验证当前登录用户合法身份(管理员或本人操作)
  67. UserConfig userConfig = getUserConfig();
  68. UserInfo currentUser = userConfig.getUserInfo(params.get(UserConfigService.CURRENT_USER_NAME));
  69. boolean admin = null != currentUser && UserRoleEnum.isAdmin(currentUser.getRoleCode());
  70. boolean self = null != currentUser && StringUtil.equals(currentUser.getUsername(), username);
  71. Assert.isTrue(admin || self, "No permission.");
  72. // 修改自己或其他用户信息
  73. UserInfo updateUser = self ? currentUser : userConfig.getUserInfo(username);
  74. Assert.notNull(updateUser, "用户不存在");
  75. // 用户昵称
  76. updateUser.setNickname(nickname);
  77. updateUser.setMail(mail);
  78. // 修改密码
  79. if (StringUtil.isNotBlank(newPwd)) {
  80. // 修改自己的密码需要验证
  81. if (self) {
  82. String oldPwd = params.get("oldPwd");
  83. Assert.hasText(oldPwd, "旧密码不能为空.");
  84. if (!StringUtil.equals(SHA1Util.b64_sha1(oldPwd), updateUser.getPassword())) {
  85. logService.log(LogType.SystemLog.ERROR, String.format("[%s]修改密码失败", username));
  86. throw new BizException("修改密码失败.");
  87. }
  88. }
  89. newPwd = SHA1Util.b64_sha1(newPwd);
  90. Assert.isTrue(!StringUtil.equals(newPwd, updateUser.getPassword()), "新旧密码不能完全一样.");
  91. updateUser.setPassword(newPwd);
  92. logService.log(LogType.UserLog.UPDATE, String.format("[%s]修改[%s]账号密码成功", currentUser.getUsername(), username));
  93. }
  94. return manager.editConfigModel(userConfig);
  95. }
  96. @Override
  97. public synchronized String remove(Map<String, String> params) {
  98. String username = params.get("username");
  99. Assert.hasText(username, "The username is null.");
  100. // 验证当前登录用户合法身份(必须是管理员操作)
  101. UserConfig userConfig = getUserConfig();
  102. UserInfo currentUser = userConfig.getUserInfo(params.get(UserConfigService.CURRENT_USER_NAME));
  103. Assert.isTrue(UserRoleEnum.isAdmin(currentUser.getRoleCode()), "No permission.");
  104. // 不能删除自己
  105. Assert.isTrue(!StringUtil.equals(currentUser.getUsername(), username), "不能删除自己.");
  106. // 删除用户
  107. UserInfo deleteUser = userConfig.getUserInfo(username);
  108. Assert.notNull(deleteUser, "用户已删除.");
  109. userConfig.removeUserInfo(username);
  110. manager.editConfigModel(userConfig);
  111. logService.log(LogType.UserLog.DELETE, String.format("[%s]删除[%s]账号成功", currentUser.getUsername(), username));
  112. return "删除用户成功!";
  113. }
  114. @Override
  115. public UserInfo getUserInfo(String currentUserName) {
  116. return getUserConfig().getUserInfo(currentUserName);
  117. }
  118. @Override
  119. public UserInfoVo getUserInfoVo(String currentUserName, String username) {
  120. // 管理员可以查看所有用户,普通用户只能查看自己
  121. UserConfig userConfig = getUserConfig();
  122. UserInfo currentUser = userConfig.getUserInfo(currentUserName);
  123. boolean admin = null != currentUser && UserRoleEnum.isAdmin(currentUser.getRoleCode());
  124. boolean self = null != currentUser && StringUtil.equals(currentUser.getUsername(), username);
  125. Assert.isTrue(admin || self, "No permission.");
  126. UserInfo userInfo = getUserConfig().getUserInfo(username);
  127. return convertUserInfo2Vo(userInfo);
  128. }
  129. @Override
  130. public List<UserInfoVo> getUserInfoAll(String currentUserName) {
  131. // 系统管理员可以查看所有用户,其他用户只能查看自己
  132. UserConfig userConfig = getUserConfig();
  133. UserInfo currentUser = userConfig.getUserInfo(currentUserName);
  134. boolean admin = null != currentUser && UserRoleEnum.isAdmin(currentUser.getRoleCode());
  135. if (admin) {
  136. return getUserConfig().getUserInfoList().stream().map(user -> convertUserInfo2Vo(user)).collect(Collectors.toList());
  137. }
  138. List<UserInfoVo> list = new ArrayList<>();
  139. UserInfo userInfo = userConfig.getUserInfo(currentUserName);
  140. list.add(convertUserInfo2Vo(userInfo));
  141. return list;
  142. }
  143. @Override
  144. public UserConfig getUserConfig() {
  145. UserConfig config = manager.getUserConfig();
  146. if (null != config) {
  147. return config;
  148. }
  149. synchronized (this) {
  150. config = manager.getUserConfig();
  151. if (null == config) {
  152. config = (UserConfig) userConfigChecker.checkAddConfigModel(new HashMap<>());
  153. UserRoleEnum admin = UserRoleEnum.ADMIN;
  154. config.getUserInfoList().add(new UserInfo(DEFAULT_USERNAME, DEFAULT_USERNAME, DEFAULT_PASSWORD, admin.getCode(), ""));
  155. manager.addConfigModel(config);
  156. }
  157. return config;
  158. }
  159. }
  160. private UserInfoVo convertUserInfo2Vo(UserInfo userInfo) {
  161. UserInfoVo userInfoVo = new UserInfoVo();
  162. if (null != userInfo) {
  163. BeanUtils.copyProperties(userInfo, userInfoVo);
  164. // 避免密码直接暴露
  165. userInfoVo.setPassword("***");
  166. userInfoVo.setRoleName(UserRoleEnum.getNameByCode(userInfo.getRoleCode()));
  167. }
  168. return userInfoVo;
  169. }
  170. }