فهرست منبع

rbac 页面接口开发进行中

reghao 5 سال پیش
والد
کامیت
b9e34ae1a1
16فایلهای تغییر یافته به همراه127 افزوده شده و 113 حذف شده
  1. 31 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/db/RoleCrud.java
  2. 35 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/db/UserCrud.java
  3. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/entity/GrantedAuthorityImpl.java
  4. 0 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/entity/RoleType.java
  5. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/RoleRepository.java
  6. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/UserRepository.java
  7. 11 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/RoleService.java
  8. 32 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/UserService.java
  9. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/CrudOps.java
  10. 0 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/DbQuery.java
  11. 0 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/JpaQuery.java
  12. 0 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/MongoQuery.java
  13. 6 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/RoleController.java
  14. 4 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/TestController.java
  15. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/UserPageController.java
  16. 0 37
      dmaster/src/test/java/cn/reghao/autodop/dmaster/auth/service/UserServiceTest.java

+ 31 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/db/RoleCrud.java

@@ -0,0 +1,31 @@
+package cn.reghao.autodop.dmaster.auth.db;
+
+import cn.reghao.autodop.dmaster.auth.entity.Role;
+import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-05-11 18:26:15
+ */
+@Service
+public class RoleCrud {
+    private RoleRepository roleRepository;
+
+    public RoleCrud(RoleRepository roleRepository) {
+        this.roleRepository = roleRepository;
+    }
+
+    public List<Role> findUserRoles(List<String> roles) {
+        Specification<Role> spec = ((root, query, criteriaBuilder) -> root.get("title").in(roles));
+        return roleRepository.findAll(spec);
+    }
+
+    public List<Role> findByRoleIds(List<Integer> roleIds) {
+        Specification<Role> spec = ((root, query, criteriaBuilder) -> root.get("id").in(roleIds));
+        return roleRepository.findAll(spec);
+    }
+}

+ 35 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/db/UserCrud.java

@@ -0,0 +1,35 @@
+package cn.reghao.autodop.dmaster.auth.db;
+
+import cn.reghao.autodop.dmaster.auth.entity.Role;
+import cn.reghao.autodop.dmaster.auth.entity.User;
+import cn.reghao.autodop.dmaster.auth.repository.UserRepository;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
+import javax.persistence.criteria.Predicate;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-05-11 18:16:07
+ */
+@Service
+public class UserCrud {
+    private UserRepository userRepository;
+
+    public UserCrud(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    public List<Role> findUserRoles(int userId) {
+        Specification<User> spec = ((root, query, criteriaBuilder) -> {
+            Join<User, Role> innerJoin = root.join("", JoinType.INNER);
+            Predicate predicate = criteriaBuilder.equal(innerJoin.get(""), userId);
+            return criteriaBuilder.and(predicate);
+        });
+
+        return null;
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/entity/GrantedAuthorityImpl.java

@@ -18,7 +18,7 @@ public class GrantedAuthorityImpl implements GrantedAuthority {
     private String role;
 
     public GrantedAuthorityImpl() {
-        this.role = RoleType.ROLE_USER.name();
+        this.role = "ROLE_USER";
     }
 
     public GrantedAuthorityImpl(String role) {

+ 0 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/entity/RoleType.java

@@ -1,9 +0,0 @@
-package cn.reghao.autodop.dmaster.auth.entity;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:16:51
- */
-public enum RoleType {
-    ROLE_ADMIN, ROLE_USER
-}

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/RoleRepository.java

@@ -2,12 +2,13 @@ package cn.reghao.autodop.dmaster.auth.repository;
 
 import cn.reghao.autodop.dmaster.auth.entity.Role;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 /**
  * @author reghao
  * @date 2019-08-29 10:52:14
  */
-public interface RoleRepository extends JpaRepository<Role, Integer> {
+public interface RoleRepository extends JpaRepository<Role, Integer>, JpaSpecificationExecutor<Role> {
     Role findByTitle(String title);
     Role findById(int roleId);
 }

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/UserRepository.java

@@ -2,12 +2,13 @@ package cn.reghao.autodop.dmaster.auth.repository;
 
 import cn.reghao.autodop.dmaster.auth.entity.User;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 /**
  * @author reghao
  * @date 2019-08-29 10:52:14
  */
-public interface UserRepository extends JpaRepository<User, Integer> {
+public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
     User findByUsername(String username);
     User findById(int userId);
 }

+ 11 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/RoleService.java

@@ -14,12 +14,23 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class RoleService {
+    private final String ROLE_PREFIX = "ROLE_";
     private final RoleRepository roleRepository;
     
     public RoleService(RoleRepository roleRepository) {
         this.roleRepository = roleRepository;
     }
 
+    public void addRole(Role role) {
+        String title = ROLE_PREFIX + role.getTitle();
+        role.setTitle(title.toUpperCase());
+        roleRepository.save(role);
+    }
+
+    public void updateRole(Role role) {
+        roleRepository.save(role);
+    }
+
     public PageList<Role> findByPage(int page, int size) {
         PageRequest pageRequest =
                 PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
@@ -30,21 +41,4 @@ public class RoleService {
     public Role findById(int id) {
         return roleRepository.findById(id);
     }
-
-    public void addOrUpdate(Role role) {
-        Integer id = role.getId();
-        if (id == null) {
-            addRole(role);
-        } else {
-            updateRole(role);
-        }
-    }
-
-    private void addRole(Role role) {
-        roleRepository.save(role);
-    }
-
-    private void updateRole(Role role) {
-        roleRepository.save(role);
-    }
 }

+ 32 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/service/UserService.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.auth.service;
 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.auth.db.RoleCrud;
 import cn.reghao.autodop.dmaster.auth.entity.GrantedAuthorityImpl;
 import cn.reghao.autodop.dmaster.auth.entity.Role;
 import cn.reghao.autodop.dmaster.auth.entity.User;
@@ -12,6 +13,7 @@ import cn.reghao.autodop.dmaster.common.db.PageList;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
+import org.springframework.security.core.GrantedAuthority;
 import org.springframework.stereotype.Service;
 
 import java.security.NoSuchAlgorithmException;
@@ -26,14 +28,14 @@ import java.util.stream.Collectors;
  */
 @Service
 public class UserService {
-    private final RoleRepository roleRepository;
     private final UserRepository userRepository;
+    private final RoleCrud roleCrud;
     private final Cryptor cryptor;
 
-    public UserService(RoleRepository roleRepository, UserRepository userRepository)
+    public UserService(UserRepository userRepository, RoleCrud roleCrud)
             throws NoSuchAlgorithmException {
-        this.roleRepository = roleRepository;
         this.userRepository = userRepository;
+        this.roleCrud = roleCrud;
         this.cryptor = new Md5Cryptor();
     }
 
@@ -72,17 +74,28 @@ public class UserService {
     }
 
     public void modifyUserRoles(int userId, Set<Integer> roleIds) {
-        /*List<Integer> list = new ArrayList<>(roleIds);
+        List<Integer> list = new ArrayList<>(roleIds);
         // 修改后用户的角色
-        List<Role> newRoles = roleRepository.findByRoleIds(list);
+        List<Role> newRoles = roleCrud.findByRoleIds(list);
+
         // 用户当前的角色
+        User user = userRepository.findById(userId);
+        List<String> roles = user.getAuthorities().stream()
+                .map(GrantedAuthority::getAuthority).collect(Collectors.toList());
+        if (roles.isEmpty()) {
+            Set<GrantedAuthorityImpl> authorities = newRoles.stream()
+                    .map(role -> new GrantedAuthorityImpl(role.getTitle()))
+                    .collect(Collectors.toSet());
+            user.setAuthorities(authorities);
+            userRepository.save(user);
+            return;
+        }
+
         List<Role> currentRoles = getUserRoles(userId);
         if (currentRoles.isEmpty()) {
             List<GrantedAuthorityImpl> authorities = newRoles.stream()
-                    .map(role -> new GrantedAuthorityImpl(userId, role.getTitle()))
+                    .map(role -> new GrantedAuthorityImpl(role.getTitle()))
                     .collect(Collectors.toList());
-            authorityMapper.batchInsert(authorities);
-            return;
         }
 
         List<Role> tmp = new ArrayList<>(currentRoles);
@@ -93,20 +106,23 @@ public class UserService {
         });
 
         if (!newRoles.isEmpty()) {
-            List<GrantedAuthorityImpl> authorities = newRoles.stream()
-                    .map(role -> new GrantedAuthorityImpl(userId, role.getTitle()))
-                    .collect(Collectors.toList());
-            authorityMapper.batchInsert(authorities);
+            Set<GrantedAuthorityImpl> authorities = newRoles.stream()
+                    .map(role -> new GrantedAuthorityImpl(role.getTitle()))
+                    .collect(Collectors.toSet());
+            user.setAuthorities(authorities);
+            userRepository.save(user);
         }
 
         if (!currentRoles.isEmpty()) {
             List<String> ids = currentRoles.stream().map(Role::getTitle).collect(Collectors.toList());
-            //authorityMapper.batchDelete(ids);
-        }*/
+            // TODO
+        }
     }
 
     public List<Role> getUserRoles(int userId) {
-        //return userRepository.findUserRoles(userId);
-        return new ArrayList<>();
+        User user = userRepository.findById(userId);
+        List<String> roles = user.getAuthorities().stream()
+                .map(GrantedAuthority::getAuthority).collect(Collectors.toList());
+        return roleCrud.findUserRoles(roles);
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/CrudOps.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.common.db;
 import java.util.List;
 
 /**
- * 数据 CRUD 操作接口
+ * 数据 CRUD 操作接口
  *
  * @author reghao
  * @date 2020-06-25 01:34:27

+ 0 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/DbQuery.java

@@ -1,8 +0,0 @@
-package cn.reghao.autodop.dmaster.common.db;
-
-/**
- * @author reghao
- * @date 2021-04-25 20:26:17
- */
-public interface DbQuery {
-}

+ 0 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/JpaQuery.java

@@ -1,8 +0,0 @@
-package cn.reghao.autodop.dmaster.common.db;
-
-/**
- * @author reghao
- * @date 2021-04-25 20:26:46
- */
-public interface JpaQuery extends DbQuery {
-}

+ 0 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/db/MongoQuery.java

@@ -1,8 +0,0 @@
-package cn.reghao.autodop.dmaster.common.db;
-
-/**
- * @author reghao
- * @date 2021-04-25 20:26:32
- */
-public interface MongoQuery extends DbQuery {
-}

+ 6 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/RoleController.java

@@ -33,4 +33,10 @@ public class RoleController {
     public String auth() {
         return WebResult.success("ok");
     }
+
+    @PostMapping("/save")
+    public String addRole(Role role) {
+        roleService.addRole(role);
+        return WebResult.success("ok");
+    }
 }

+ 4 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/TestController.java

@@ -50,12 +50,12 @@ public class TestController {
 
     private void addRoles() {
         Role admin = new Role();
-        admin.setTitle(RoleType.ROLE_ADMIN.name());
+        admin.setTitle("ROLE_ADMIN");
         admin.setName("管理员");
         admin.setRemark("具有所有访问权限");
 
         Role user = new Role();
-        user.setTitle(RoleType.ROLE_USER.name());
+        user.setTitle("ROLE_USER");
         user.setName("用户");
         user.setRemark("具有最基本的访问权限");
 
@@ -115,13 +115,13 @@ public class TestController {
         menus.add(resourceMenu);
         menuRepository.saveAll(menus);
 
-        Role admin = roleRepository.findByTitle(RoleType.ROLE_ADMIN.name());
+        Role admin = roleRepository.findByTitle("ROLE_ADMIN");
         admin.setMenus(menus);
         roleRepository.save(admin);
     }
 
     private void addUsers() {
-        GrantedAuthorityImpl authority = new GrantedAuthorityImpl(RoleType.ROLE_ADMIN.name());
+        GrantedAuthorityImpl authority = new GrantedAuthorityImpl("ROLE_ADMIN");
         Set<GrantedAuthorityImpl> authorities = new HashSet<>();
         authorities.add(authority);
 

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/view/controller/UserPageController.java

@@ -64,12 +64,12 @@ public class UserPageController {
 
     @GetMapping("/role")
     public String assignRolePage(@RequestParam(value = "ids") int userId, Model model) {
-        /*List<Role> roles = roleRepository.findAll();
+        List<Role> roles = roleRepository.findAll();
         List<Role> authRoles = userService.getUserRoles(userId);
 
         model.addAttribute("id", userId);
         model.addAttribute("list", roles);
-        model.addAttribute("authRoles", authRoles);*/
+        model.addAttribute("authRoles", authRoles);
         return "/system/user/role";
     }
 }

+ 0 - 37
dmaster/src/test/java/cn/reghao/autodop/dmaster/auth/service/UserServiceTest.java

@@ -1,56 +1,19 @@
 package cn.reghao.autodop.dmaster.auth.service;
 
-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.DmasterApplication;
-import cn.reghao.autodop.dmaster.auth.entity.GrantedAuthorityImpl;
-import cn.reghao.autodop.dmaster.auth.entity.Role;
-import cn.reghao.autodop.dmaster.auth.entity.RoleType;
-import cn.reghao.autodop.dmaster.auth.entity.User;
-import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
-import cn.reghao.autodop.dmaster.auth.repository.UserRepository;
-import cn.reghao.autodop.dmaster.auth.entity.Menu;
-import cn.reghao.autodop.dmaster.auth.entity.MenuType;
-import cn.reghao.autodop.dmaster.auth.repository.MenuRepository;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.domain.*;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 @Slf4j
 @ActiveProfiles("dev")
 @SpringBootTest(classes = DmasterApplication.class)
 @RunWith(SpringRunner.class)
 class UserServiceTest {
-    @Autowired
-    private RoleRepository roleRepository;
-    @Autowired
-    private UserRepository userRepository;
-    @Autowired
-    private MenuRepository menuRepository;
-    private Cryptor cryptor;
-    {
-        try {
-            cryptor = new Md5Cryptor();
-        } catch (NoSuchAlgorithmException e) {
-            e.printStackTrace();
-        }
-    }
-
     /**
-     * 初始化默认用户, 角色和权限
-     *
      * @param
      * @return
      * @date 2021-05-11 上午9:20