|
|
@@ -0,0 +1,175 @@
|
|
|
+package cn.reghao.autodop.dmaster.auth.service;
|
|
|
+
|
|
|
+import cn.reghao.autodop.common.utils.JsonUtil;
|
|
|
+import cn.reghao.autodop.common.utils.security.Cryptor;
|
|
|
+import cn.reghao.autodop.common.utils.security.Md5Cryptor;
|
|
|
+import cn.reghao.autodop.common.utils.security.Salt;
|
|
|
+import cn.reghao.autodop.dmaster.app.vo.PageList;
|
|
|
+import cn.reghao.autodop.dmaster.auth.entity.Permission;
|
|
|
+import cn.reghao.autodop.dmaster.auth.entity.Role;
|
|
|
+import cn.reghao.autodop.dmaster.auth.entity.UserAuth;
|
|
|
+import cn.reghao.autodop.dmaster.auth.repository.PermissionRepository;
|
|
|
+import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
|
|
|
+import cn.reghao.autodop.dmaster.auth.repository.UserAuthRepository;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.PageRequest;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2020-06-19 16:36:53
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class UserService {
|
|
|
+ private final String rolePrefix = "ROLE_";
|
|
|
+ private Cryptor cryptor;
|
|
|
+ private RoleRepository roleRepository;
|
|
|
+ private UserAuthRepository userAuthRepository;
|
|
|
+ private PermissionRepository permissionRepository;
|
|
|
+
|
|
|
+ public UserService(RoleRepository roleRepository, UserAuthRepository userAuthRepository,
|
|
|
+ PermissionRepository permissionRepository) throws NoSuchAlgorithmException {
|
|
|
+ this.cryptor = new Md5Cryptor();
|
|
|
+ this.roleRepository = roleRepository;
|
|
|
+ this.userAuthRepository = userAuthRepository;
|
|
|
+ this.permissionRepository = permissionRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addOrUpdate(int type, String json) {
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ Role role = (Role) JsonUtil.jsonToObject(json, Role.class);
|
|
|
+ String name = rolePrefix + role.getName().toUpperCase();
|
|
|
+ role.setName(name);
|
|
|
+ Role roleEntity = roleRepository.findRoleByName(role.getName());
|
|
|
+ if (roleEntity == null) {
|
|
|
+ roleRepository.save(role);
|
|
|
+ } else {
|
|
|
+ roleEntity.setDescription(role.getDescription());
|
|
|
+ roleEntity.setUpdateTime(LocalDateTime.now());
|
|
|
+ roleRepository.save(roleEntity);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ Permission permission = (Permission) JsonUtil.jsonToObject(json, Permission.class);
|
|
|
+ Role role1 = permission.getRole();
|
|
|
+ Role roleEntity1 = roleRepository.findRoleByName(rolePrefix + role1.getName());
|
|
|
+ if (roleEntity1 != null) {
|
|
|
+ permission.setRole(roleEntity1);
|
|
|
+ } else {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Permission permissionEntity = permissionRepository.findByRole(roleEntity1);
|
|
|
+ if (permissionEntity != null) {
|
|
|
+ permissionEntity.setRole(permission.getRole());
|
|
|
+ permissionEntity.setUrls(permission.getUrls());
|
|
|
+ permissionEntity.setUpdateTime(LocalDateTime.now());
|
|
|
+ permissionRepository.save(permissionEntity);
|
|
|
+ } else {
|
|
|
+ permissionRepository.save(permission);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ UserAuth userAuth = (UserAuth) JsonUtil.jsonToObject(json, UserAuth.class);
|
|
|
+ String password = userAuth.getPassword();
|
|
|
+ String salt = Salt.get(64);
|
|
|
+ String encryptedPwd = cryptor.encrypt(password + salt);
|
|
|
+ userAuth.setPassword(encryptedPwd);
|
|
|
+ userAuth.setSalt(salt);
|
|
|
+ String roleName = rolePrefix + userAuth.getRole().getName();
|
|
|
+ Role roleEntity2 = roleRepository.findRoleByName(roleName);
|
|
|
+ if (roleEntity2 != null) {
|
|
|
+ userAuth.setRole(roleEntity2);
|
|
|
+ } else {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ UserAuth authEntity = userAuthRepository.findUserAuthByUsername(userAuth.getUsername());
|
|
|
+ if (authEntity == null) {
|
|
|
+ userAuthRepository.save(userAuth);
|
|
|
+ } else {
|
|
|
+ authEntity.setPassword(userAuth.getPassword());
|
|
|
+ authEntity.setSalt(salt);
|
|
|
+ authEntity.setRole(userAuth.getRole());
|
|
|
+ authEntity.setUpdateTime(LocalDateTime.now());
|
|
|
+ userAuthRepository.save(authEntity);
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public PageList getByPage(int type, PageRequest pageRequest) {
|
|
|
+ // TODO 可否动态代理简化代码???
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ Page<Role> rolePage = roleRepository.findAll(pageRequest);
|
|
|
+ PageList<Role> rolePageList = new PageList<>();
|
|
|
+ rolePageList.setTotalSize(rolePage.getTotalElements());
|
|
|
+ rolePageList.setTotalPages(rolePage.getTotalPages());
|
|
|
+ rolePageList.setList(rolePage.getContent().stream()
|
|
|
+ .peek(role -> {
|
|
|
+ String name = role.getName().split(rolePrefix)[1];
|
|
|
+ role.setName(name);
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+
|
|
|
+ return rolePageList;
|
|
|
+ case 2:
|
|
|
+ Page<Permission> permissionPage = permissionRepository.findAll(pageRequest);
|
|
|
+ PageList<Permission> permissionPageList = new PageList<>();
|
|
|
+ permissionPageList.setTotalSize(permissionPage.getTotalElements());
|
|
|
+ permissionPageList.setTotalPages(permissionPage.getTotalPages());
|
|
|
+ permissionPageList.setList(permissionPage.getContent().stream()
|
|
|
+ .peek(permission -> {
|
|
|
+ Role role = permission.getRole();
|
|
|
+ String name = role.getName().split(rolePrefix)[1];
|
|
|
+ role.setName(name);
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ return permissionPageList;
|
|
|
+ case 3:
|
|
|
+ Page<UserAuth> userAuthPage = userAuthRepository.findAll(pageRequest);
|
|
|
+ PageList<UserAuth> userAuthPageList = new PageList<>();
|
|
|
+ userAuthPageList.setTotalSize(userAuthPage.getTotalElements());
|
|
|
+ userAuthPageList.setTotalPages(userAuthPage.getTotalPages());
|
|
|
+ userAuthPageList.setList(userAuthPage.getContent().stream()
|
|
|
+ .peek(userAuth -> {
|
|
|
+ // Role 是一个共享实体
|
|
|
+ Role role = userAuth.getRole();
|
|
|
+ /* TODO 数组越界异常后会返回 401,而不是 500
|
|
|
+ String name = role.getName().split(rolePrefix)[1];
|
|
|
+ role.setName(name);*/
|
|
|
+ if (role.getName().contains(rolePrefix)) {
|
|
|
+ String name = role.getName().split(rolePrefix)[1];
|
|
|
+ role.setName(name);
|
|
|
+ }
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+
|
|
|
+ return userAuthPageList;
|
|
|
+ default:
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void delete(int type, String name) {
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ System.out.println("删除 Role");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ System.out.println("删除 Permission");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ userAuthRepository.deleteByUsername(name);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|