Răsfoiți Sursa

权限控制相关

liuyc 2 ani în urmă
părinte
comite
03cd30bd37

+ 35 - 18
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -107,17 +107,21 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
         String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
 
         // 远程调用返回数据
-        R<UserInfo> result;
+        R<UserInfo> result = null;
         // 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
         if (userType.equals(UserEnum.WEB.getName())) {
-            result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
+            result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());  //客户端-填报
         } else if (userType.equals(UserEnum.APP.getName())) {
-            result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
-        } else {
-            result = userClient.userInfo(tenantId, username, UserEnum.ALL.getName());
+            result = userClient.userInfo(tenantId, username, UserEnum.APP.getName()); //APP
+        } else if (userType.equals(UserEnum.ARCHIVES.getName())) {
+            result = userClient.userInfo(tenantId, username, UserEnum.ARCHIVES.getName()); //档案
+        } else if (userType.equals(UserEnum.MANAGER.getName())) {
+            result = userClient.userInfo(tenantId, username, UserEnum.MANAGER.getName());  //后管
         }
+        //TODO
 
         // 判断返回信息
+        assert result != null;
         if (result.isSuccess()) {
             UserInfo userInfo = result.getData();
             User user = userInfo.getUser();
@@ -142,9 +146,13 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
             }
 
-            /*校验登陆账号权限,客户端、档案登陆userType=1,app端登陆userType=2,全部端均可登陆userType=3*/
-            if (user.getUserType().equals(1) || user.getUserType().equals(2) || user.getUserType().equals(3)) {
-                if (!user.getUserType().equals(3)) {
+            /* 校验登陆账号权限,客户端填报、试验userType=1,app端userType=2,档案userType=3,后管userType=4 */
+            if (user.getUserType().contains(("1"))
+                    || user.getUserType().contains(("2"))
+                    || user.getUserType().contains(("3"))
+                    || user.getUserType().contains(("4"))) {
+                if (!("1,2,3,4").equals(user.getUserType())) {
+                    //如果不是全部权限,那么分批校验登陆平台权限
                     this.judgeLoginPermission(user);
                 }
             } else {
@@ -226,33 +234,42 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
 
     /**
      * 校验登陆账号权限
-     * @author liuyc
+     *
      * @param user user信息
+     * @author liuyc
      */
     private void judgeLoginPermission(User user) {
+        //获取平台信息
         String clientId = TokenUtil.getClientIdFromHeader();
-        Integer result = 0;
+        String result = "0";
         if (clientId != null) {
             switch (clientId) {
                 case "client":
-                case "archives":
-                    result = 1; //WEB=客户端
+                    result = "1"; //WEB=客户端
                     break;
                 case "uni-app":
-                    result = 2; //APP=APP端
+                    result = "2"; //APP=APP端
+                    break;
+                case "archives":
+                    result = "3"; //archives=档案
                     break;
                 case "saber":
-                    result = 3; //ALL=后管
+                    result = "4"; //manger=后管
                     break;
             }
         }
-        if (!result.equals(user.getUserType())) {
-            if ((result == 1 && user.getUserType().equals(2)) || (result == 2 && user.getUserType().equals(1))) {
-                //均可登陆
+
+        if (!result.contains(user.getUserType())) {
+            if ((("1").equals(result) && user.getUserType().contains("1")) //web放行
+                    || (("2").equals(result) && user.getUserType().contains("2")) //app放行
+                    || (("3").equals(result) && user.getUserType().contains("3")) //档案放行
+                    || (("4").equals(result) && user.getUserType().contains("4")) //后管放行
+            ) {
                 return;
             }
-            throw new UserDeniedAuthorizationException(TokenUtil.USER_ACCOUNT_NO_PERMISSION);
         }
+        throw new UserDeniedAuthorizationException(TokenUtil.USER_ACCOUNT_NO_PERMISSION);
+
     }
 
 

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/UserVO.java

@@ -15,7 +15,7 @@ public class UserVO {
     /**
      * 用户平台
      */
-    private Integer userType;
+    private String userType;
     /**
      * 账号
      */

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/AppUser.java

@@ -43,7 +43,7 @@ public class AppUser extends TenantEntity {
     /**
      * 用户平台
      */
-    private Integer userType;
+    private String userType;
     /**
      * 账号
      */

+ 2 - 2
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@@ -43,9 +43,9 @@ public class User extends TenantEntity {
      */
     private String code;
     /**
-     * 用户平台
+     * 用户平台 改为多选 字符串拼接
      */
-    private Integer userType;
+    private String userType;
     /**
      * 账号
      */

+ 37 - 30
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java

@@ -23,47 +23,54 @@ import lombok.Getter;
  * 用户类型枚举
  *
  * @author Chill
+ * @updater liuYc 2023-01-05
  */
 @Getter
 @AllArgsConstructor
 public enum UserEnum {
 
-	/**
-	 * web客户端
-	 */
-	WEB("web", 1),
+    /**
+     * web客户端-填报
+     */
+    WEB("web", 1),
 
-	/**
-	 * app端
-	 */
-	APP("app", 2),
+    /**
+     * app端
+     */
+    APP("uni-app", 2),
+
+    /**
+     * archives档案
+     */
+	ARCHIVES("archives", 3),
 
 	/**
-	 * all全部端
+	 * saber后管
 	 */
-	ALL("all", 3),
+	MANAGER("saber", 4),
+
 	;
 
-	final String name;
-	final int category;
+    final String name;
+    final int category;
 
-	/**
-	 * 匹配枚举值
-	 *
-	 * @param name 名称
-	 * @return BladeUserEnum
-	 */
-	public static UserEnum of(String name) {
-		if (name == null) {
-			return null;
-		}
-		UserEnum[] values = UserEnum.values();
-		for (UserEnum smsEnum : values) {
-			if (smsEnum.name.equals(name)) {
-				return smsEnum;
-			}
-		}
-		return null;
-	}
+    /**
+     * 匹配枚举值
+     *
+     * @param name 名称
+     * @return BladeUserEnum
+     */
+    public static UserEnum of(String name) {
+        if (name == null) {
+            return null;
+        }
+        UserEnum[] values = UserEnum.values();
+        for (UserEnum smsEnum : values) {
+            if (smsEnum.name.equals(name)) {
+                return smsEnum;
+            }
+        }
+        return null;
+    }
 
 }

+ 76 - 66
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java

@@ -53,79 +53,89 @@ import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
 @Service
 public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
 
-	@Override
-	public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict) {
-		return page.setRecords(baseMapper.selectDictPage(page, dict));
-	}
+    @Override
+    public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict) {
+        return page.setRecords(baseMapper.selectDictPage(page, dict));
+    }
 
-	@Override
-	public List<DictVO> tree() {
-		return ForestNodeMerger.merge(baseMapper.tree());
-	}
+    @Override
+    public List<DictVO> tree() {
+        return ForestNodeMerger.merge(baseMapper.tree());
+    }
 
-	@Override
-	public List<DictVO> parentTree() {
-		return ForestNodeMerger.merge(baseMapper.parentTree());
-	}
+    @Override
+    public List<DictVO> parentTree() {
+        return ForestNodeMerger.merge(baseMapper.parentTree());
+    }
 
-	@Override
-	public String getValue(String code, String dictKey) {
-		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
-	}
+    @Override
+    public String getValue(String code, String dictKey) {
+        if (dictKey.contains(",")) {
+			//liuYc 2023-01-05 userType字符串拼接
+            String[] split = dictKey.split(",");
+            List<String> str = new ArrayList<>();
+            for (String key : split) {
+                String result = Func.toStr(baseMapper.getValue(code, key), StringPool.EMPTY);
+                str.add(result);
+            }
+            return Func.toStr(str, StringPool.EMPTY);
+        }
+        return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+    }
 
-	@Override
-	public List<Dict> getList(String code) {
-		return baseMapper.getList(code);
-	}
+    @Override
+    public List<Dict> getList(String code) {
+        return baseMapper.getList(code);
+    }
 
-	@Override
-	public List<DictVO02> getList2(String code) {
-		return baseMapper.getList2(code);
-	}
+    @Override
+    public List<DictVO02> getList2(String code) {
+        return baseMapper.getList2(code);
+    }
 
-	@Override
-	public boolean submit(Dict dict) {
-		LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("当前字典键值已存在!");
-		}
-		// 修改顶级字典后同步更新下属字典的编号
-		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
-			Dict parent = DictCache.getById(dict.getId());
-			this.update(Wrappers.<Dict>update().lambda().set(Dict::getCode, dict.getCode()).eq(Dict::getCode, parent.getCode()).ne(Dict::getParentId, BladeConstant.TOP_PARENT_ID));
-		}
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		return saveOrUpdate(dict);
-	}
+    @Override
+    public boolean submit(Dict dict) {
+        LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
+        Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
+        if (cnt > 0L) {
+            throw new ServiceException("当前字典键值已存在!");
+        }
+        // 修改顶级字典后同步更新下属字典的编号
+        if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+            Dict parent = DictCache.getById(dict.getId());
+            this.update(Wrappers.<Dict>update().lambda().set(Dict::getCode, dict.getCode()).eq(Dict::getCode, parent.getCode()).ne(Dict::getParentId, BladeConstant.TOP_PARENT_ID));
+        }
+        if (Func.isEmpty(dict.getParentId())) {
+            dict.setParentId(BladeConstant.TOP_PARENT_ID);
+        }
+        dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+        CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+        return saveOrUpdate(dict);
+    }
 
-	@Override
-	public boolean removeDict(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Dict>query().lambda().in(Dict::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("请先删除子节点!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
+    @Override
+    public boolean removeDict(String ids) {
+        Long cnt = baseMapper.selectCount(Wrappers.<Dict>query().lambda().in(Dict::getParentId, Func.toLongList(ids)));
+        if (cnt > 0L) {
+            throw new ServiceException("请先删除子节点!");
+        }
+        return removeByIds(Func.toLongList(ids));
+    }
 
-	@Override
-	public IPage<DictVO> parentList(Map<String, Object> dict, Query query) {
-		IPage<Dict> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, Dict.class).lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(Dict::getSort));
-		return DictWrapper.build().pageVO(page);
-	}
+    @Override
+    public IPage<DictVO> parentList(Map<String, Object> dict, Query query) {
+        IPage<Dict> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, Dict.class).lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(Dict::getSort));
+        return DictWrapper.build().pageVO(page);
+    }
 
-	@Override
-	public List<DictVO> childList(Map<String, Object> dict, Long parentId) {
-		if (parentId < 0) {
-			return new ArrayList<>();
-		}
-		dict.remove("parentId");
-		Dict parentDict = DictCache.getById(parentId);
-		List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
-		return DictWrapper.build().listNodeVO(list);
-	}
+    @Override
+    public List<DictVO> childList(Map<String, Object> dict, Long parentId) {
+        if (parentId < 0) {
+            return new ArrayList<>();
+        }
+        dict.remove("parentId");
+        Dict parentDict = DictCache.getById(parentId);
+        List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
+        return DictWrapper.build().listNodeVO(list);
+    }
 }

+ 1 - 1
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java

@@ -148,7 +148,7 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> imp
 			user.setPostId(String.valueOf(post.getId()));
 			user.setBirthday(new Date());
 			user.setSex(1);
-			user.setUserType(UserEnum.WEB.getCategory());
+			user.setUserType(String.valueOf(UserEnum.WEB.getCategory()));
 			user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
 			boolean temp = super.saveOrUpdate(tenant);
 			R<Boolean> result = userClient.saveUser(user);

+ 1 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -536,7 +536,7 @@ public class UserController {
                                 newUser.setCreateTime(new Date());
                             }
 
-                            newUser.setUserType(2);
+                            newUser.setUserType("1");
                             newUser.setAccount(account);
                             newUser.setRealName(name);
                             newUser.setName(name);

+ 5 - 5
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -156,7 +156,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         StringBuffer stringBuffer = new StringBuffer();
         Set<String> set = new TreeSet<>();
         List<SaveUserInfoByProjectDTO> projectAndUserList = user.getProjectAndUserList();
-        projectAndUserList.stream().forEach(i -> {
+        projectAndUserList.forEach(i -> {
             String roleId = i.getRoleId();
             set.add(roleId);
         });
@@ -164,7 +164,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             stringBuffer.append(s).append(",");
         }
         user.setRoleId(String.valueOf(stringBuffer.deleteCharAt(stringBuffer.length() - 1)));
-        user.setUserType(1); //用户平台-WEB
+        //user.setUserType(1); //用户平台-WEB
         user.setName(user.getRealName());
         boolean b1 = save(user);
         if (b1) {
@@ -427,7 +427,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         data.forEach(userExcel -> {
             User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
             // 设置用户平台
-            user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1));
+            user.setUserType(String.valueOf(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1)));
 
             //获取上级部门id
             String superiorDeptId = Func.toStrWithEmpty(SysCache.getDeptIds(AuthUtil.getTenantId(), userExcel.getDeptName().split("/")[0]), StringPool.EMPTY);
@@ -538,13 +538,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
     public UserVO platformDetail(User user) {
         User detail = baseMapper.selectOne(Condition.getQueryWrapper(user));
         UserVO userVO = UserWrapper.build().entityVO(detail);
-        if (userVO.getUserType().equals(UserEnum.WEB.getCategory())) {
+        if (String.valueOf(UserEnum.WEB.getCategory()).contains(userVO.getUserType())) {
             UserWeb userWeb = new UserWeb();
             UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
             if (ObjectUtil.isNotEmpty(query)) {
                 userVO.setUserExt(query.getUserExt());
             }
-        } else if (userVO.getUserType().equals(UserEnum.APP.getCategory())) {
+        } else if (String.valueOf(UserEnum.APP.getCategory()).contains(userVO.getUserType())) {
             UserApp userApp = new UserApp();
             UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
             if (ObjectUtil.isNotEmpty(query)) {

+ 19 - 18
blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java

@@ -36,24 +36,25 @@ import java.util.Objects;
  */
 public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
 
-	public static UserWrapper build() {
-		return new UserWrapper();
-	}
+    public static UserWrapper build() {
+        return new UserWrapper();
+    }
 
-	@Override
-	public UserVO entityVO(User user) {
-		UserVO userVO = Objects.requireNonNull(BeanUtil.copy(user, UserVO.class));
-		Tenant tenant = SysCache.getTenant(user.getTenantId());
-		List<String> roleName = SysCache.getRoleNames(user.getRoleId());
-		List<String> deptName = SysCache.getDeptNames(user.getDeptId());
-		List<String> postName = SysCache.getPostNames(user.getPostId());
-		userVO.setTenantName(tenant.getTenantName());
-		userVO.setRoleName(Func.join(roleName));
-		userVO.setDeptName(Func.join(deptName));
-		userVO.setPostName(Func.join(postName));
-		userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
-		userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
-		return userVO;
-	}
+    @Override
+    public UserVO entityVO(User user) {
+        UserVO userVO = Objects.requireNonNull(BeanUtil.copy(user, UserVO.class));
+        Tenant tenant = SysCache.getTenant(user.getTenantId());
+        List<String> roleName = SysCache.getRoleNames(user.getRoleId());
+        List<String> deptName = SysCache.getDeptNames(user.getDeptId());
+        List<String> postName = SysCache.getPostNames(user.getPostId());
+        userVO.setTenantName(tenant.getTenantName());
+        userVO.setRoleName(Func.join(roleName));
+        userVO.setDeptName(Func.join(deptName));
+        userVO.setPostName(Func.join(postName));
+        userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
+        String value = DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()).replace("[", "").replace("]", "");
+        userVO.setUserTypeName(value);
+        return userVO;
+    }
 
 }