瀏覽代碼

增加权限修改

4228306 5 年之前
父節點
當前提交
a1e62dc4b0

+ 5 - 9
src/main/java/com/yaoxiang/diagnosis/controller/TestController.java

@@ -1,9 +1,7 @@
 package com.yaoxiang.diagnosis.controller;
 
-import com.google.common.collect.ArrayTable;
-import com.google.common.collect.HashBasedTable;
-import com.google.common.collect.Table;
 import com.google.gson.reflect.TypeToken;
+import com.yaoxiang.diagnosis.authority.AuthCheck;
 import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.dao.OptionRepo;
 import com.yaoxiang.diagnosis.dao.QuestionRepo;
@@ -20,11 +18,8 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -34,7 +29,6 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
 
 /**
  * @AUTHOR: DaiFengWen
@@ -70,7 +64,6 @@ public class TestController {
         return "hello";
     }
 
-    @PreAuthorize("hasRole('ROLE_USER')")
     @RequestMapping(value = "/test", method = RequestMethod.GET)
     public String test() {
         long cnt = visitCount.incrementAndGet();
@@ -78,7 +71,6 @@ public class TestController {
         return name + " , Now is " + new Date() + "  and visit times : " + cnt;
     }
 
-    @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')")
     @RequestMapping(value = "/test2", method = RequestMethod.GET)
     public String test2() {
         long cnt = visitCount.incrementAndGet();
@@ -87,6 +79,7 @@ public class TestController {
     }
 
     @GetMapping("/info")
+    @AuthCheck(role = "test")
     public AuthUser auth() {
         AuthUser user = SecurityUtil.getCurrentUser();
         return user;
@@ -346,8 +339,11 @@ public class TestController {
 //        List<TagMasterVo>vos = new ArrayList<>();
 
         Map<String, TagMasterVo> voMap = new LinkedHashMap<>();
+        int i = 0;
         for (List<SpecialKnowledgeVo> knowledges : lists) {
+            logger.info("序号{}", i);
             for (SpecialKnowledgeVo k : knowledges) {
+                logger.info("knowledge={}", k);
                 TagMasterVo vo = voMap.getOrDefault(k.getContent(), new TagMasterVo());
                 vo.setContent(k.getContent());
                 vo.setLevel(k.getLevel());

+ 4 - 0
src/main/java/com/yaoxiang/diagnosis/dao/AuthorityRepo.java

@@ -3,5 +3,9 @@ package com.yaoxiang.diagnosis.dao;
 import com.yaoxiang.diagnosis.entity.Authority;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface AuthorityRepo extends JpaRepository<Authority, Long> {
+
+    Authority findByName(String name);
 }

+ 5 - 0
src/main/java/com/yaoxiang/diagnosis/dao/RoleRepo.java

@@ -3,6 +3,11 @@ package com.yaoxiang.diagnosis.dao;
 import com.yaoxiang.diagnosis.entity.Role;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface RoleRepo extends JpaRepository<Role, Long> {
 
+    Role findByName(String name);
+
+    List<Role> findByAuthorityIdsContaining(String id);
 }

+ 4 - 1
src/main/java/com/yaoxiang/diagnosis/dao/UserRepo.java

@@ -2,6 +2,7 @@ package com.yaoxiang.diagnosis.dao;
 
 import com.yaoxiang.diagnosis.entity.UserInfo;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 import java.util.List;
 
@@ -10,7 +11,7 @@ import java.util.List;
  * @DATE: Create in 2018/8/24 18:26
  * @DESCRIPTION:
  */
-public interface UserRepo extends JpaRepository<UserInfo, Long> {
+public interface UserRepo extends JpaRepository<UserInfo, Long> , JpaSpecificationExecutor<UserInfo> {
     UserInfo findByUsername(String username);
 
     UserInfo findByPhone(String phone);
@@ -24,4 +25,6 @@ public interface UserRepo extends JpaRepository<UserInfo, Long> {
     List<UserInfo> findByGrade(String grade);
 
     List<UserInfo> findByUserTypeAndGrade(String userType,String grade);
+
+    List<UserInfo> findByRoleIdsContaining(String id);
 }

+ 112 - 1
src/main/java/com/yaoxiang/diagnosis/service/RoleService.java

@@ -2,6 +2,9 @@ package com.yaoxiang.diagnosis.service;
 
 import com.yaoxiang.diagnosis.dao.AuthorityRepo;
 import com.yaoxiang.diagnosis.dao.RoleRepo;
+import com.yaoxiang.diagnosis.dao.UserRepo;
+import com.yaoxiang.diagnosis.entity.UserInfo;
+import com.yaoxiang.diagnosis.model.Result;
 import com.yaoxiang.diagnosis.util.CommonUtil;
 import com.yaoxiang.diagnosis.entity.Authority;
 import com.yaoxiang.diagnosis.entity.Role;
@@ -10,6 +13,9 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @Service
@@ -19,12 +25,108 @@ public class RoleService {
     private RoleRepo roleRepo;
     @Resource
     private AuthorityRepo authorityRepo;
+//    @Resource
+//    private UserRepo userRepo;
+
+    public Result addRole(String name, String type, String code, String authorityIds) {
+        if (StringUtils.isBlank(name) || hasRole(name)) {
+            return Result.fail("该角色已存在");
+        }
+        Role role = new Role();
+        role.setName(name);
+        role.setType(type);
+        role.setCode(code);
+        role.setAuthorityIds(authorityIds);
+        roleRepo.save(role);
+        return Result.ok();
+    }
+
+    public Result updateRole(Long id, String name, String type, String code, String authorityIds) {
+        Role role = roleRepo.findById(id).orElse(null);
+        if (role == null) {
+            return Result.fail("未找到角色");
+        }
+        role.setName(name);
+        role.setType(type);
+        role.setCode(code);
+        role.setAuthorityIds(authorityIds);
+        roleRepo.save(role);
+        return Result.ok();
+    }
+
+    public boolean deleteRole(Long id, Consumer<Role> consumer) {
+        Role role = roleRepo.findById(id).orElse(null);
+        if (role == null) {
+            return false;
+        }
+        consumer.accept(role);
+        roleRepo.delete(role);
+        return true;
+    }
+
+    public boolean deleteAuthority(Long id) {
+        if (id == null) {
+            return false;
+        }
+        List<Role> roles = roleRepo.findByAuthorityIdsContaining("%" + id + "%");
+        List<Role> result = roles.stream().filter(u -> Arrays.stream(u.getAuthorityIds().split(","))
+                .anyMatch(r -> r.equals(String.valueOf(id)))).collect(Collectors.toList());
+        return deleteAuthority(id, authority -> result.forEach(role -> {
+            String authorityIds = role.getAuthorityIds();
+            String newAuthorityIds = Arrays.stream(authorityIds.split(",")).filter(a -> !a.equals(String.valueOf(id))).collect(Collectors.joining(","));
+            role.setAuthorityIds(newAuthorityIds);
+            roleRepo.save(role);
+        }));
+    }
+
+    public boolean deleteAuthority(Long id, Consumer<Authority> consumer) {
+        Authority authority = authorityRepo.findById(id).orElse(null);
+        if (authority == null) {
+            return false;
+        }
+        consumer.accept(authority);
+        authorityRepo.delete(authority);
+        return true;
+    }
+
+    public Result updateAuthority(Long id, String name, String type, String des) {
+        Authority authority = authorityRepo.findById(id).orElse(null);
+        if (authority == null) {
+            return Result.fail("未找到权限");
+        }
+        authority.setName(name);
+        authority.setType(type);
+        authority.setDes(des);
+        authorityRepo.save(authority);
+        return Result.ok();
+    }
+
+
+    public Result addAuthority(String name, String type, String des) {
+        if (StringUtils.isBlank(name) || hasAuthority(name)) {
+            return Result.fail("该权限已存在");
+        }
+        Authority authority = new Authority();
+        authority.setName(name);
+        authority.setType(type);
+        authority.setDes(des);
+        authorityRepo.save(authority);
+        return Result.ok();
+    }
 
     public Role get(Long id) {
         return roleRepo.getOne(id);
     }
 
-    public List<Role> list() {
+    public boolean hasRole(String role) {
+        return roleRepo.findByName(role) != null;
+    }
+
+    public boolean hasAuthority(String authority) {
+        return authorityRepo.findByName(authority) != null;
+    }
+
+    public List<Role> listRoles() {
         return roleRepo.findAll();
     }
 
@@ -36,6 +138,15 @@ public class RoleService {
         return listRoles(Arrays.asList(ids.split(",")));
     }
 
+    public List<String> listRoleNames(List<String> ids) {
+        List<String> result = new ArrayList<>();
+        if (CommonUtil.isEmpty(ids)) {
+            return result;
+        }
+        List<Long> roleIds = ids.stream().map(Long::valueOf).collect(Collectors.toList());
+        return roleRepo.findAllById(roleIds).stream().map(Role::getName).collect(Collectors.toList());
+    }
+
     public List<Role> listRoles(List<String> ids) {
         List<Role> result = new ArrayList<>();
         if (CommonUtil.isEmpty(ids)) {

+ 32 - 9
src/main/java/com/yaoxiang/diagnosis/service/UserService.java

@@ -3,6 +3,7 @@ package com.yaoxiang.diagnosis.service;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.yaoxiang.diagnosis.dao.UserRepo;
+import com.yaoxiang.diagnosis.entity.Role;
 import com.yaoxiang.diagnosis.model.Result;
 import com.yaoxiang.diagnosis.util.CommonUtil;
 import com.yaoxiang.diagnosis.util.MD5Util;
@@ -13,13 +14,17 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 
 /**
@@ -38,7 +43,7 @@ public class UserService {
 
     public Result addUser(UserInfo user) {
         if (!checkUsername(user.getUsername())) {
-            String msg = String.format("用户名%s已存在",user.getUsername());
+            String msg = String.format("用户名%s已存在", user.getUsername());
             logger.error(msg);
             return Result.fail(msg);
         }
@@ -64,8 +69,8 @@ public class UserService {
         user.setId(null);
         userRepo.save(user);
         logger.info("新增用户成功,username={},userType={},grade={},password=***",
-                user.getUsername(),user.getUserType(),user.getGrade());
-        return new Result(true,String.format("新增用户%s成功",user.getUsername()));
+                user.getUsername(), user.getUserType(), user.getGrade());
+        return new Result(true, String.format("新增用户%s成功", user.getUsername()));
     }
 
     public List<UserInfo> listUsers(String userType) {
@@ -80,6 +85,7 @@ public class UserService {
         return userRepo.findAllById(uids);
     }
 
+
     public UserInfo findByUsername(String username) {
         UserInfo userInfo = userRepo.findByUsername(username);
         if (userInfo == null) {
@@ -140,12 +146,29 @@ public class UserService {
         return userRepo.findByUserTypeAndGrade(Constants.USER_TYPE_STUDENT, grade);
     }
 
-    public boolean delete(Long uid,String userType){
+    public boolean delete(Long uid, String userType) {
         UserInfo userInfo = getSimpleUser(uid);
-        if(userInfo == null || !userType.equals(userInfo.getUserType())){
+        if (userInfo == null || !userType.equals(userInfo.getUserType())) {
             return false;
         }
         userRepo.delete(userInfo);
         return true;
     }
+
+    public boolean deleteRole(Long id) {
+        if (id == null) {
+            return false;
+        }
+        List<UserInfo> list = userRepo.findByRoleIdsContaining("%" + id + "%");
+        List<UserInfo> result = list.stream().filter(u -> Arrays.stream(u.getRoleIds().split(","))
+                .anyMatch(r -> r.equals(String.valueOf(id)))).collect(Collectors.toList());
+        roleService.deleteRole(id, role -> result.forEach(u->{
+            String roleIds = u.getRoleIds();
+            String newRoleIds = Arrays.stream(roleIds.split(",")).filter(r -> !r.equals(String.valueOf(id))).collect(Collectors.joining(","));
+            u.setRoleIds(newRoleIds);
+            userRepo.save(u);
+        }));
+        return true;
+    }
+
 }