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