From a732684ccf6a76c3d7e4048b3718e0dd401f6e5f Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 22 Apr 2024 16:13:52 +0800
Subject: [PATCH] 登录新增登录类型,根据类型过滤对应类型的角色信息返回

---
 src/main/java/org/springblade/modules/system/service/IRoleService.java         |    8 ++
 src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java |   23 +++++++
 src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java    |   17 +++++
 src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml             |   15 +++++
 src/main/java/org/springblade/modules/system/mapper/RoleMapper.java            |    8 ++
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java |   54 ++++++++++++++++++
 src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java |   10 +++
 src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java   |   12 +---
 src/main/java/org/springblade/modules/system/service/IUserService.java         |   11 +++
 9 files changed, 147 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
index 560b066..015133d 100644
--- a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
+++ b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -66,6 +66,16 @@
 	private final BladeRedis bladeRedis;
 	private final JwtProperties jwtProperties;
 
+	/**
+	 *
+	 * @param tenantId
+	 * @param username
+	 * @param password
+	 * @param deptId
+	 * @param roleId
+	 * @param type 登录类型  2:pc  3: app
+	 * @return
+	 */
 	@ApiLog("登录用户验证")
 	@PostMapping("/oauth/token")
 	@ApiOperation(value = "获取认证令牌", notes = "传入租户ID:tenantId,账号:account,密码:password")
@@ -73,7 +83,8 @@
 					@ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
 					@ApiParam(value = "密码", required = true) @RequestParam(required = false) String password,
 					@ApiIgnore @RequestHeader(name = TokenUtil.DEPT_HEADER_KEY, required = false) String deptId,
-					@ApiIgnore @RequestHeader(name = TokenUtil.ROLE_HEADER_KEY, required = false) String roleId) {
+					@ApiIgnore @RequestHeader(name = TokenUtil.ROLE_HEADER_KEY, required = false) String roleId,
+					@ApiParam(value = "登录类型", required = false) @RequestParam(required = false,defaultValue = "3") Integer loginType) {
 
 		Kv authInfo = Kv.create();
 
@@ -89,7 +100,9 @@
 			.set("grantType", grantType)
 			.set("refreshToken", refreshToken)
 			.set("userType", userType)
-			.set("deptId", deptId).set("roleId", roleId);
+			.set("deptId", deptId)
+			.set("loginType",loginType)
+			.set("roleId", roleId);
 
 		ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
 		UserInfo userInfo = granter.grant(tokenParameter);
diff --git a/src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java b/src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java
index b8cc88e..207a0d0 100644
--- a/src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java
+++ b/src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java
@@ -68,6 +68,8 @@
 		String tenantId = tokenParameter.getArgs().getStr("tenantId");
 		String username = tokenParameter.getArgs().getStr("username");
 		String password = tokenParameter.getArgs().getStr("password");
+		// 获取登录类型 2:pc 3:app
+		String type = tokenParameter.getArgs().getStr("loginType");
 
 		// 判断登录是否锁定
 		int cnt = Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
@@ -83,16 +85,8 @@
 			if (TokenUtil.judgeTenant(tenant)) {
 				throw new ServiceException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
 			}
-			// 获取用户类型
-			String userType = tokenParameter.getArgs().getStr("userType");
 			// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
-			if (userType.equals(UserEnum.WEB.getName())) {
-				userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.WEB);
-			} else if (userType.equals(UserEnum.APP.getName())) {
-				userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.APP);
-			} else {
-				userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), UserEnum.OTHER);
-			}
+			userInfo = userService.userInfo(tenantId, username, DigestUtil.hex(password), Integer.parseInt(type));
 		}
 		if (userInfo == null || userInfo.getUser() == null) {
 			// 增加错误锁定次数
diff --git a/src/main/java/org/springblade/modules/system/mapper/RoleMapper.java b/src/main/java/org/springblade/modules/system/mapper/RoleMapper.java
index 65d7c86..1bd7926 100644
--- a/src/main/java/org/springblade/modules/system/mapper/RoleMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/RoleMapper.java
@@ -74,4 +74,12 @@
 	 * @return
 	 */
     List<Role> getRoleList(@Param("roleParam") RoleParam roleParam);
+
+	/**
+	 * 查询对应的角色id
+	 * @param roleId
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	List<String> getRoleIdStrByRoleIdAndType(@Param("ids") String roleId,@Param("types") List<Integer> type);
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml b/src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml
index 57e1edd..c957454 100644
--- a/src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/RoleMapper.xml
@@ -68,6 +68,21 @@
         </foreach>
     </select>
 
+    <!--查询对应的角色id-->
+    <select id="getRoleIdStrByRoleIdAndType" resultType="java.lang.String">
+        SELECT id FROM BLADE_ROLE
+        WHERE id IN
+        <foreach collection="ids.split(',')" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        <if test="types!=null and types.size()>0">
+            and type in
+            <foreach collection="types" item="type" open="(" separator="," close=")">
+                #{type}
+            </foreach>
+        </if>
+    </select>
+
     <!--角色查询-->
     <select id="getRoleList" resultType="org.springblade.modules.system.entity.Role">
         SELECT br.* FROM blade_role br
diff --git a/src/main/java/org/springblade/modules/system/service/IRoleService.java b/src/main/java/org/springblade/modules/system/service/IRoleService.java
index f754b33..1bf482f 100644
--- a/src/main/java/org/springblade/modules/system/service/IRoleService.java
+++ b/src/main/java/org/springblade/modules/system/service/IRoleService.java
@@ -124,4 +124,12 @@
 	 * @return
 	 */
     List<Role> getRoleList(RoleParam roleParam);
+
+	/**
+	 * 查询对应的角色id
+	 * @param roleId
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	List<String> getRoleIdStrByRoleIdAndType(String roleId,Integer type);
 }
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index 7f61797..e46f227 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -118,6 +118,17 @@
 	 * @param tenantId
 	 * @param account
 	 * @param password
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	UserInfo userInfo(String tenantId, String account, String password, Integer type);
+
+	/**
+	 * 用户信息
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @param password
 	 * @param userEnum
 	 * @return
 	 */
diff --git a/src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java
index 0d3c539..6015305 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/MenuServiceImpl.java
@@ -110,6 +110,16 @@
 	public static final List<Integer> list2 = Arrays.asList(1, 11, null);
 
 
+	/**
+	 *
+	 * @param roleId
+	 * @param topMenuId
+	 * @param labelType
+	 * @param menuType
+	 * @param roleName
+	 * @param houseCode
+	 * @return
+	 */
 	@Override
 	public List<MenuVO> routes(String roleId, Long topMenuId, Integer labelType, Integer menuType, String roleName,String houseCode) {
 		if (StringUtil.isBlank(roleId)) {
diff --git a/src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java
index ebcbae0..134392f 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/RoleServiceImpl.java
@@ -256,4 +256,27 @@
 		roleParam.setRoleId(AuthUtil.getUser().getRoleId());
 		return baseMapper.getRoleList(roleParam);
 	}
+
+	/**
+	 * 查询对应的角色id
+	 * @param roleId
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	@Override
+	public List<String> getRoleIdStrByRoleIdAndType(String roleId,Integer type) {
+		List<Integer> list = new ArrayList<>();
+		if (type!=1){
+			list.add(1);
+			// pc
+			if (type==2){
+				list.add(2);
+			}
+			// app
+			if (type==3){
+				list.add(3);
+			}
+		}
+		return baseMapper.getRoleIdStrByRoleIdAndType(roleId,list);
+	}
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 871e434..682f01c 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -274,6 +274,30 @@
 		return buildUserInfo(user);
 	}
 
+	/**
+	 * 用户信息
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @param password
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	@Override
+	public UserInfo userInfo(String tenantId, String account, String password, Integer type) {
+		User user = baseMapper.getUser(tenantId, account, password);
+		return buildUserInfo(user, type);
+	}
+
+	/**
+	 * 用户信息
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @param password
+	 * @param userEnum
+	 * @return
+	 */
 	@Override
 	public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) {
 		User user = baseMapper.getUser(tenantId, account, password);
@@ -319,6 +343,36 @@
 		return userInfo;
 	}
 
+	/**
+	 *
+	 * @param user
+	 * @param type 登录类型 2:pc 3:app
+	 * @return
+	 */
+	private UserInfo buildUserInfo(User user, Integer type) {
+		if (ObjectUtil.isEmpty(user)) {
+			return null;
+		}
+		UserInfo userInfo = new UserInfo();
+		userInfo.setUser(user);
+		if (Func.isNotEmpty(user)) {
+			// 判断登录类型设置对应的角色id
+			user.setRoleId(Strings.join(roleService.getRoleIdStrByRoleIdAndType(user.getRoleId(),type), ','));
+			// 设置角色别名
+			List<String> roleAlias = roleService.getRoleAliases(user.getRoleId());
+			userInfo.setRoles(roleAlias);
+		}
+		// 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段
+		Kv detail = Kv.create().set("type", null);
+		UserOther userOther = new UserOther();
+		UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
+		if (ObjectUtil.isNotEmpty(query)) {
+			detail.set("ext", query.getUserExt());
+		}
+		userInfo.setDetail(detail);
+		return userInfo;
+	}
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public UserInfo userInfo(UserOauth userOauth) {

--
Gitblit v1.9.3