From 32ec64370ad5af7df86d59acdc134e697d936db2 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 23 九月 2024 20:41:11 +0800
Subject: [PATCH] 课目管理

---
 src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java |   50 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
index 495d408..938ffee 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
@@ -2,11 +2,15 @@
 
 
 import com.mindskip.xzs.context.WebContext;
+import com.mindskip.xzs.domain.Department;
+import com.mindskip.xzs.domain.enums.DeptAdminEnum;
 import com.mindskip.xzs.domain.enums.RoleEnum;
 import com.mindskip.xzs.domain.enums.UserStatusEnum;
+import com.mindskip.xzs.domain.vo.CascaderDataVO;
+import com.mindskip.xzs.repository.DepartmentMapper;
 import com.mindskip.xzs.service.AuthenticationService;
 import com.mindskip.xzs.service.UserService;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.security.authentication.AuthenticationProvider;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.LockedException;
@@ -15,11 +19,14 @@
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.User;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
@@ -29,25 +36,13 @@
  * @date 2021/12/25 9:45
  */
 @Component
+@RequiredArgsConstructor
 public class RestAuthenticationProvider implements AuthenticationProvider {
 
     private final AuthenticationService authenticationService;
     private final UserService userService;
     private final WebContext webContext;
-
-    /**
-     * Instantiates a new Rest authentication provider.
-     *
-     * @param authenticationService the authentication service
-     * @param userService           the user service
-     * @param webContext            the web context
-     */
-    @Autowired
-    public RestAuthenticationProvider(AuthenticationService authenticationService, UserService userService, WebContext webContext) {
-        this.authenticationService = authenticationService;
-        this.userService = userService;
-        this.webContext = webContext;
-    }
+    private final DepartmentMapper departmentMapper;
 
     @Override
     public Authentication authenticate(Authentication authentication) throws AuthenticationException {
@@ -70,9 +65,28 @@
         }
 
         ArrayList<GrantedAuthority> grantedAuthorities = new ArrayList<>();
+        // 璧嬩簣閮ㄩ棬绠$悊鍛樿鑹�
+        if (new Integer(-1).equals(user.getRole())) {
+            grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.DEPT_ADMIN.getRoleName()));
+        }
         grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.fromCode(user.getRole()).getRoleName()));
-
-        User authUser = new User(user.getUserName(), user.getPassword(), grantedAuthorities);
+        // 鑾峰彇璇ョ敤鎴风鐞嗛儴闂ㄥ強鍏朵笅绾eptAdminIds
+        List<Department> deptList = userService.getDeptAdminIdAndInfo(user.getId());
+        List<Integer> deptIds = deptList.stream().map(dept -> dept.getId()).collect(Collectors.toList());
+        if (! CollectionUtils.isEmpty(deptIds)) {
+            deptIds = departmentMapper.getChilds(deptIds); // 鏌ヨ瀛愰儴闂�
+            // 濡傛灉璇ラ儴闂ㄨ繕琚祴浜堜簡绠$悊涓夌骇鍗曚綅鐨勭殑鏉冮檺锛屽垯鏌ュ嚭鏉�
+            if (deptList.stream().anyMatch(dept -> Objects.nonNull(dept.getSpecial()) && dept.getSpecial())) {
+                List<CascaderDataVO> levelDeptList = departmentMapper.getLevelDeptList(3);
+                List<Integer> level3DeptIds = levelDeptList.stream().map(CascaderDataVO::getValue).collect(Collectors.toList());
+                deptIds.addAll(level3DeptIds);
+            }
+        }
+         else if (CollectionUtils.isEmpty(deptIds)) {
+            // 濡傛灉鏄櫘閫氬鍛橈紝鏌ュ嚭鎵�鍦ㄩ儴闂�
+            deptIds = userService.getDeptIds(user.getId());
+        }
+        MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), deptIds);
         return new UsernamePasswordAuthenticationToken(authUser, authUser.getPassword(), authUser.getAuthorities());
     }
 

--
Gitblit v1.8.0