Forráskód Böngészése

更新 rbac 模块

reghao 2 éve
szülő
commit
edf3e95ee0

+ 2 - 0
manager/bin/application-dev.yml

@@ -1,4 +1,6 @@
 spring:
+  thymeleaf:
+    cache: false
   datasource:
     url: jdbc:mysql://localhost:3306/reghao_devops_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
     username: dev

+ 2 - 0
manager/bin/application-test.yml

@@ -1,4 +1,6 @@
 spring:
+  thymeleaf:
+    cache: true
   datasource:
     url: jdbc:mysql://192.168.0.110:3306/reghao_devops_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
     username: test

+ 2 - 1
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/AppStatImpl.java

@@ -8,6 +8,7 @@ import cn.reghao.devops.manager.app.model.po.config.AppConfig;
 import cn.reghao.devops.manager.app.service.bd.AppStat;
 import cn.reghao.devops.manager.event.MessageSenders;
 import cn.reghao.devops.manager.machine.service.MachineService;
+import cn.reghao.devops.manager.rbac.model.constant.RoleType;
 import cn.reghao.devops.manager.rbac.model.po.UserAuthority;
 import cn.reghao.jutil.jdk.event.message.EventMessage;
 import lombok.extern.slf4j.Slf4j;
@@ -50,7 +51,7 @@ public class AppStatImpl implements AppStat {
         if (authToken == null) {
             throw new Exception("未登录");
         } else {
-            boolean isAdmin = authToken.getAuthorities().contains(new UserAuthority("ROLE_ADMIN"));
+            boolean isAdmin = authToken.getAuthorities().contains(new UserAuthority(RoleType.ROLE_ADMIN.name()));
             if ("prod".equals(appConfig.getEnv()) && !isAdmin) {
                 throw new Exception("没有权限");
             }

+ 2 - 1
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/BuildAppImpl.java

@@ -13,6 +13,7 @@ import cn.reghao.devops.common.build.chain.impl.BuildChainResult;
 import cn.reghao.devops.common.build.chain.BuildTools;
 import cn.reghao.devops.common.build.chain.Bootstrap;
 import cn.reghao.devops.common.build.chain.Handler;
+import cn.reghao.devops.manager.rbac.model.constant.RoleType;
 import cn.reghao.devops.manager.rbac.model.po.User;
 import cn.reghao.devops.manager.rbac.model.po.UserAuthority;
 import cn.reghao.jutil.jdk.result.Result;
@@ -65,7 +66,7 @@ public class BuildAppImpl implements BuildApp {
         if (authToken == null) {
             throw new Exception("未登录");
         } else {
-            boolean isAdmin = authToken.getAuthorities().contains(new UserAuthority("ROLE_ADMIN"));
+            boolean isAdmin = authToken.getAuthorities().contains(new UserAuthority(RoleType.ROLE_ADMIN.name()));
             if ("prod".equals(appConfig.getEnv()) && !isAdmin) {
                 throw new Exception("没有权限");
             }

+ 2 - 2
manager/src/main/java/cn/reghao/devops/manager/rbac/model/dto/UserAddDTO.java

@@ -32,7 +32,7 @@ public class UserAddDTO implements Serializable {
     private String mobilePhone;
     private String email;
 
-    public User to() {
+    /*public User to() {
         User user = new User();
         user.setUsername(username);
         user.setPassword(password);
@@ -42,5 +42,5 @@ public class UserAddDTO implements Serializable {
         user.setMobilePhone(mobilePhone);
         user.setEmail(email);
         return user;
-    }
+    }*/
 }

+ 1 - 0
manager/src/main/java/cn/reghao/devops/manager/rbac/model/po/Menu.java

@@ -19,6 +19,7 @@ import java.util.*;
 @Getter
 /*@EqualsAndHashCode(callSuper = false, exclude = {"roles"})
 @ToString(exclude = {"roles"})*/
+@Table(name = "sys_menu")
 @Entity
 public class Menu extends BaseEntity {
     // Menu 类型

+ 2 - 1
manager/src/main/java/cn/reghao/devops/manager/rbac/model/po/Role.java

@@ -19,6 +19,7 @@ import java.util.Set;
 @Data
 @EqualsAndHashCode(callSuper = false, exclude = {"description", "menus"})
 @ToString(exclude = {"menus"})
+@Table(name = "sys_role")
 @Entity
 public class Role extends BaseEntity {
     @Pattern(regexp = "^\\w+$", message = "只能是数字、英文字符和下划线")
@@ -31,7 +32,7 @@ public class Role extends BaseEntity {
     private String description;
     // Role 端维护 Role 和 Menu 之间的关系
     @ManyToMany
-    @JoinTable(name = "role_menu",
+    @JoinTable(name = "sys_role_menu",
             joinColumns = @JoinColumn(name = "role_id"),
             inverseJoinColumns = @JoinColumn(name = "menu_id"))
     private Set<Menu> menus;

+ 9 - 8
manager/src/main/java/cn/reghao/devops/manager/rbac/model/po/User.java

@@ -20,6 +20,7 @@ import java.util.stream.Collectors;
  */
 @Getter
 @Setter
+@Table(name = "sys_user")
 @Entity
 public class User extends BaseEntity implements UserDetails {
     // 用户名和密码
@@ -34,11 +35,12 @@ public class User extends BaseEntity implements UserDetails {
     private String salt;
     // roles 和 authorities 是同一个东东, 只是 authorities 用于 Spring Security
     @ElementCollection(fetch = FetchType.EAGER)
+    @CollectionTable(name = "sys_user_role")
     private Set<String> role;
     @Transient
     private Set<UserAuthority> authorities;
-    private Boolean isEnabled;
-    private Boolean isLocked;
+    private Boolean isEnabled = true;
+    private Boolean isLocked = false;
 
     @NotBlank(message = "用户名不能为空白字符串")
     private String nickname;
@@ -47,14 +49,13 @@ public class User extends BaseEntity implements UserDetails {
     private String email;
     private Integer gender;
 
-    public User() {
-        this.isEnabled = true;
-        this.isLocked = false;
-    }
-
-    public User(String username, Set<UserAuthority> authorities) {
+    public User(String username, String password, Set<UserAuthority> authorities) {
         this.username = username;
+        this.password = password;
         this.authorities = authorities;
+        this.nickname = username;
+        this.avatarUrl = "/imgs/avatar/default.jpg";
+        this.gender = 2;
     }
 
     @Override

+ 2 - 3
manager/src/main/java/cn/reghao/devops/manager/rbac/service/UserServiceImpl.java

@@ -3,7 +3,7 @@ package cn.reghao.devops.manager.rbac.service;
 import cn.reghao.devops.manager.rbac.db.repository.UserRepository;
 import cn.reghao.jutil.jdk.security.Cryptor;
 import cn.reghao.jutil.jdk.security.Md5Cryptor;
-import cn.reghao.jutil.jdk.security.Salt;
+import cn.reghao.jutil.jdk.security.RandomString;
 import cn.reghao.devops.manager.rbac.model.dto.UserInfo;
 import cn.reghao.devops.manager.rbac.model.dto.UserRole;
 import cn.reghao.devops.manager.rbac.model.po.UserAuthority;
@@ -56,13 +56,12 @@ public class UserServiceImpl implements UserService {
         }
 
         setEncryptPassword(user);
-        user.setAvatarUrl("/imgs/avatar/default.png");
         userRepository.save(user);
     }
 
     private void setEncryptPassword(User user) {
         String password = user.getPassword();
-        String salt = Salt.get(64);
+        String salt = RandomString.getSalt(64);
         String encryptPwd = cryptor.encrypt(password + salt);
         user.setPassword(encryptPwd);
         user.setSalt(salt);

+ 1 - 1
manager/src/main/resources/application.yml

@@ -21,7 +21,7 @@ spring:
     encoding: utf-8
     servlet:
       content-type: text/html
-    cache: false
+#    cache: true
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.zaxxer.hikari.HikariDataSource

BIN
manager/src/main/resources/static/imgs/avatar/default.jpg


BIN
manager/src/main/resources/static/imgs/avatar/default.png


+ 3 - 15
manager/src/test/java/AccountTest.java

@@ -1,4 +1,5 @@
 import cn.reghao.devops.manager.ManagerApplication;
+import cn.reghao.devops.manager.rbac.model.constant.RoleType;
 import cn.reghao.devops.manager.rbac.model.po.User;
 import cn.reghao.devops.manager.rbac.model.po.UserAuthority;
 import cn.reghao.devops.manager.rbac.service.UserService;
@@ -11,7 +12,6 @@ import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -29,20 +29,8 @@ public class AccountTest {
     public void createAccount() {
         String username = "admin";
         String password = "123456";
-        createAccount(username, password);
-    }
-
-    private void createAccount(String username, String password) {
-        User user = new User();
-        user.setUsername(username);
-        user.setPassword(password);
-        user.setNickname("芒果");
-        Set<UserAuthority> authorities = Set.of(new UserAuthority("ROLE_ADMIN"));;
-        user.setAuthorities(authorities);
-        user.setGender(1);
-        user.setIsEnabled(true);
-        user.setIsLocked(false);
-
+        String role = RoleType.ROLE_ADMIN.name();
+        User user = new User(username, password, Set.of(new UserAuthority(role)));
         userService.createUser(user);
     }
 }