From 009ac75229725c5d83f80c6d62357b65a6b11e7b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 14 十一月 2024 16:57:10 +0800
Subject: [PATCH] fix 修复 数据权限多角色与权限标识符共用导致的问题 https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IB4CS4
---
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 51 ++++++++++++++++++++++++++++++++++-----------------
1 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
index ef5335f..0fdd521 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -4,17 +4,20 @@
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Opt;
import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.lock.annotation.Lock4j;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthUser;
+import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.GlobalConstants;
+import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.dto.RoleDTO;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType;
-import org.dromara.common.core.enums.TenantStatus;
+import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.*;
import org.dromara.common.log.event.LogininforEvent;
@@ -25,13 +28,9 @@
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysSocialBo;
-import org.dromara.system.domain.vo.SysSocialVo;
-import org.dromara.system.domain.vo.SysTenantVo;
-import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.domain.vo.*;
import org.dromara.system.mapper.SysUserMapper;
-import org.dromara.system.service.ISysPermissionService;
-import org.dromara.system.service.ISysSocialService;
-import org.dromara.system.service.ISysTenantService;
+import org.dromara.system.service.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -59,6 +58,8 @@
private final ISysTenantService tenantService;
private final ISysPermissionService permissionService;
private final ISysSocialService sysSocialService;
+ private final ISysRoleService roleService;
+ private final ISysDeptService deptService;
private final SysUserMapper userMapper;
@@ -66,20 +67,28 @@
* 缁戝畾绗笁鏂圭敤鎴�
*
* @param authUserData 鎺堟潈鍝嶅簲瀹炰綋
- * @return 缁熶竴鍝嶅簲瀹炰綋
*/
+ @Lock4j
public void socialRegister(AuthUser authUserData) {
String authId = authUserData.getSource() + authUserData.getUuid();
// 绗笁鏂圭敤鎴蜂俊鎭�
SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class);
BeanUtil.copyProperties(authUserData.getToken(), bo);
- bo.setUserId(LoginHelper.getUserId());
+ Long userId = LoginHelper.getUserId();
+ bo.setUserId(userId);
bo.setAuthId(authId);
bo.setOpenId(authUserData.getUuid());
bo.setUserName(authUserData.getUsername());
bo.setNickName(authUserData.getNickname());
+ List<SysSocialVo> checkList = sysSocialService.selectByAuthId(authId);
+ if (CollUtil.isNotEmpty(checkList)) {
+ throw new ServiceException("姝や笁鏂硅处鍙峰凡缁忚缁戝畾!");
+ }
// 鏌ヨ鏄惁宸茬粡缁戝畾鐢ㄦ埛
- List<SysSocialVo> list = sysSocialService.selectByAuthId(authId);
+ SysSocialBo params = new SysSocialBo();
+ params.setUserId(userId);
+ params.setSource(bo.getSource());
+ List<SysSocialVo> list = sysSocialService.queryList(params);
if (CollUtil.isEmpty(list)) {
// 娌℃湁缁戝畾鐢ㄦ埛, 鏂板鐢ㄦ埛淇℃伅
sysSocialService.insertByBo(bo);
@@ -87,6 +96,8 @@
// 鏇存柊鐢ㄦ埛淇℃伅
bo.setId(list.get(0).getId());
sysSocialService.updateByBo(bo);
+ // 濡傛灉瑕佺粦瀹氱殑骞冲彴璐﹀彿宸茬粡琚粦瀹氳繃浜� 鏄惁鎶涘紓甯歌嚜琛屽喅鏂�
+ // throw new ServiceException("姝ゅ钩鍙拌处鍙峰凡缁忚缁戝畾!");
}
}
@@ -97,6 +108,9 @@
public void logout() {
try {
LoginUser loginUser = LoginHelper.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ return;
+ }
if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) {
// 瓒呯骇绠$悊鍛� 鐧诲嚭娓呴櫎鍔ㄦ�佺鎴�
TenantHelper.clearDynamic();
@@ -129,7 +143,6 @@
SpringUtils.context().publishEvent(logininforEvent);
}
-
/**
* 鏋勫缓鐧诲綍鐢ㄦ埛
*/
@@ -143,9 +156,13 @@
loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId()));
loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId()));
- loginUser.setDeptName(ObjectUtil.isNull(user.getDept()) ? "" : user.getDept().getDeptName());
- List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class);
- loginUser.setRoles(roles);
+ if (ObjectUtil.isNotNull(user.getDeptId())) {
+ Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
+ loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
+ loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY));
+ }
+ List<SysRoleVo> roles = roleService.selectRolesByUserId(user.getUserId());
+ loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
return loginUser;
}
@@ -167,7 +184,7 @@
* 鐧诲綍鏍¢獙
*/
public void checkLogin(LoginType loginType, String tenantId, String username, Supplier<Boolean> supplier) {
- String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username;
+ String errorKey = CacheConstants.PWD_ERR_CNT_KEY + username;
String loginFail = Constants.LOGIN_FAIL;
// 鑾峰彇鐢ㄦ埛鐧诲綍閿欒娆℃暟锛岄粯璁や负0 (鍙嚜瀹氫箟闄愬埗绛栫暐 渚嬪: key + username + ip)
@@ -216,7 +233,7 @@
if (ObjectUtil.isNull(tenant)) {
log.info("鐧诲綍绉熸埛锛歿} 涓嶅瓨鍦�.", tenantId);
throw new TenantException("tenant.not.exists");
- } else if (TenantStatus.DISABLE.getCode().equals(tenant.getStatus())) {
+ } else if (SystemConstants.DISABLE.equals(tenant.getStatus())) {
log.info("鐧诲綍绉熸埛锛歿} 宸茶鍋滅敤.", tenantId);
throw new TenantException("tenant.blocked");
} else if (ObjectUtil.isNotNull(tenant.getExpireTime())
--
Gitblit v1.9.3