소스 검색

fix: 小程序登录设置id与权限控制

zhangying 20 시간 전
부모
커밋
531017703e

+ 10 - 2
jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroRealm.java

@@ -74,8 +74,16 @@ public class ShiroRealm extends AuthorizingRealm {
         }
         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
 
-        // 设置用户拥有的角色集合,比如“admin,test”
-        Set<String> roleSet = commonApi.queryUserRolesById(userId);
+		// 小程序/SSO用户(username以personal_或enterprise_开头)无需RBAC权限校验,授予通配权限
+		// 这类用户不是后台管理系统用户,只要能看到的页面,其背后接口都应允许调用
+		if (username != null && (username.startsWith("personal_") || username.startsWith("enterprise_"))) {
+			info.addStringPermission("*");
+			log.debug("===============小程序/SSO用户[{}]授予通配权限==============", username);
+			return info;
+		}
+
+		// 设置用户拥有的角色集合,比如"admin,test"
+		Set<String> roleSet = commonApi.queryUserRolesById(userId);
         //System.out.println(roleSet.toString());
         info.setRoles(roleSet);
 

+ 1 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/sso/service/impl/LoginSSOServiceImpl.java

@@ -392,6 +392,7 @@ public class LoginSSOServiceImpl implements ILoginSSOService {
         // TokenUtils.getLoginUser() → redisUtil.get(SYS_USERS_CACHE::username)
         // ShiroRealm.checkUserTokenIsEffect() → jwtTokenRefresh() 需要loginUser.getPassword()校验token签名
         LoginUser loginUser = new LoginUser();
+        loginUser.setId(username);        // 必须设置id,Shiro RedisCache通过id字段构建权限缓存Key,否则会抛PrincipalIdNullException
         loginUser.setUsername(username);
         loginUser.setPassword(username);  // 与JwtUtil.sign(username, username)一致
         loginUser.setStatus(1);           // 正常状态