This commit is contained in:
77
2024-05-19 00:45:31 +08:00
parent 32933c2840
commit 92134f6ed2
26 changed files with 67 additions and 45 deletions

View File

@@ -137,6 +137,6 @@ public interface UserConstants {
/** /**
* 管理员ID * 管理员ID
*/ */
Long ADMIN_ID = 1L; Long SUPER_ADMIN_ID = 1L;
} }

View File

@@ -68,7 +68,7 @@ public class PlusDataPermissionHandler {
DataPermissionHelper.setVariable("user", currentUser); DataPermissionHelper.setVariable("user", currentUser);
} }
// 如果是超级管理员,则不过滤数据 // 如果是超级管理员,则不过滤数据
if (LoginHelper.isAdmin()) { if (LoginHelper.isSuperAdmin()) {
return where; return where;
} }
String dataFilterSql = buildDataFilter(dataColumns, isSelect); String dataFilterSql = buildDataFilter(dataColumns, isSelect);

View File

@@ -185,12 +185,13 @@ public class LoginHelper {
* @param userId 用户ID * @param userId 用户ID
* @return 结果 * @return 结果
*/ */
public static boolean isAdmin(Long userId) { public static boolean isSuperAdmin(Long userId) {
return UserConstants.ADMIN_ID.equals(userId); return UserConstants.SUPER_ADMIN_ID.equals(userId);
} }
public static boolean isAdmin() {
return isAdmin(getUserId()); public static boolean isSuperAdmin() {
return isSuperAdmin(getUserId());
} }
} }

View File

@@ -47,18 +47,20 @@ public class TenantFilter implements Filter {
} }
String tenantHeader = request.getHeader(TENANT_ID_HEADER); String tenantHeader = request.getHeader(TENANT_ID_HEADER);
boolean login = TenantHelper.isLogin(); boolean login = TenantHelper.isLogin();
if(login){ if(login){ // 已经登录
String tenantId = LoginHelper.getTenantId();
if("/getInfo".equals(requestURI)){ // 特殊放权接口
TenantHelper.setTenantId(tenantId);
filterChain.doFilter(servletRequest, servletResponse);
return;
}
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
if(TenantConstants.SUPER_ADMIN_ID.equals(userId)){ if(TenantConstants.SUPER_ADMIN_ID.equals(userId)){ // 超管前端给什么用什么
TenantHelper.setTenantId(tenantHeader); TenantHelper.setTenantId(tenantHeader);
filterChain.doFilter(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse);
return; return;
} }
} if(tenantId == null || !tenantId.equals(tenantHeader)){ // 非超管 如果当前用户和前端给的不支持 返回异常
if(!StringUtils.isBlank(tenantHeader)){
if(login){
String tenantId = LoginHelper.getTenantId();
if(tenantId == null || !tenantId.equals(tenantHeader)){
ServletUtils.renderString(response, JSONUtil.toJsonStr(R.fail("平台错误"))); ServletUtils.renderString(response, JSONUtil.toJsonStr(R.fail("平台错误")));
return; return;
} }
@@ -66,16 +68,6 @@ public class TenantFilter implements Filter {
}else{ }else{
TenantHelper.setTenantId(tenantHeader); TenantHelper.setTenantId(tenantHeader);
} }
} else {
if(login){
String tenantId = LoginHelper.getTenantId();
if(tenantId == null){
ServletUtils.renderString(response, JSONUtil.toJsonStr(R.fail("平台错误")));
return;
}
TenantHelper.setTenantId(tenantId);
}
}
filterChain.doFilter(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse);
} finally { } finally {
TenantHelper.clearTenant(); TenantHelper.clearTenant();

View File

@@ -49,6 +49,8 @@ public class AgreementSetting implements Serializable {
private String contractTemplate; private String contractTemplate;
private String tenantId;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@@ -207,4 +207,6 @@ public class Borrow implements Serializable {
@Schema(description = "修改时间") @Schema(description = "修改时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;
private String tenantId;
} }

View File

@@ -17,5 +17,5 @@ public class BorrowLog {
private Long id; private Long id;
private Double withdrawAccount; private Double withdrawAccount;
private Long customerId; private Long customerId;
private String tenantId;
} }

View File

@@ -64,4 +64,6 @@ public class BorrowStatus implements Serializable {
@Schema(description = "修改时间") @Schema(description = "修改时间")
private Date updateTime; private Date updateTime;
private String tenantId;
} }

View File

@@ -95,6 +95,8 @@ public class Customer implements Serializable {
@Schema(description = "修改时间") @Schema(description = "修改时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;
private String tenantId;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@@ -154,6 +154,8 @@ public class CustomerInfo implements Serializable {
@Schema(description = "签名") @Schema(description = "签名")
private String signature; private String signature;
private String tenantId;
private Boolean allowSignature = true; private Boolean allowSignature = true;
@TableField(exist = false) @TableField(exist = false)

View File

@@ -43,6 +43,7 @@ public class HomeSetting implements Serializable {
private Boolean openWithdrawCode; private Boolean openWithdrawCode;
private String defaultCoinUnit; private String defaultCoinUnit;
private String randomPhoneVersion; private String randomPhoneVersion;
private String tenantId;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@@ -56,6 +56,8 @@ public class LoansSetting implements Serializable {
*/ */
private String serviceRate; private String serviceRate;
private String tenantId;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

View File

@@ -2,6 +2,7 @@ package com.ruoyi.dk.kit;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import com.ruoyi.component.tenant.helper.TenantHelper;
import com.ruoyi.dk.domain.Customer; import com.ruoyi.dk.domain.Customer;
import com.ruoyi.dk.executor.ExecutorConstant; import com.ruoyi.dk.executor.ExecutorConstant;
import com.ruoyi.dk.service.CustomerService; import com.ruoyi.dk.service.CustomerService;
@@ -67,7 +68,7 @@ public class DkLoginKit {
loginUser.setRoleId(null); loginUser.setRoleId(null);
loginUser.setUserId(user.getId()); loginUser.setUserId(user.getId());
loginUser.setUserType(UserType.APP_USER.getUserType()); loginUser.setUserType(UserType.APP_USER.getUserType());
// loginUser.setTenantId(user); loginUser.setTenantId(user.getTenantId());
LoginHelper.login(loginUser); LoginHelper.login(loginUser);
sysLoginService.recordLogininfor(loginUser.getUsername(), UserType.APP_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); sysLoginService.recordLogininfor(loginUser.getUsername(), UserType.APP_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
return StpUtil.getTokenValue(); return StpUtil.getTokenValue();

View File

@@ -157,7 +157,7 @@ public class SysLoginController {
return R.ok(tenantList); return R.ok(tenantList);
}else { }else {
SysTenantBo sysTenantBo = new SysTenantBo(); SysTenantBo sysTenantBo = new SysTenantBo();
sysTenantBo.setTenantId(TenantHelper.getTenantId()); sysTenantBo.setTenantId(LoginHelper.getTenantId());
List<SysTenantVo> tenantList = tenantService.queryList(sysTenantBo); List<SysTenantVo> tenantList = tenantService.queryList(sysTenantBo);
return R.ok(tenantList); return R.ok(tenantList);
} }

View File

@@ -123,7 +123,7 @@ public class SysUserController extends BaseController {
SysPost post = new SysPost(); SysPost post = new SysPost();
post.setStatus(UserConstants.POST_NORMAL); post.setStatus(UserConstants.POST_NORMAL);
List<SysRole> roles = roleService.selectRoleList(role); List<SysRole> roles = roleService.selectRoleList(role);
ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin())); ajax.put("roles", LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin()));
ajax.put("posts", postService.selectPostList(post)); ajax.put("posts", postService.selectPostList(post));
if (ObjectUtil.isNotNull(userId)) { if (ObjectUtil.isNotNull(userId)) {
SysUser sysUser = userService.selectUserById(userId); SysUser sysUser = userService.selectUserById(userId);
@@ -225,7 +225,7 @@ public class SysUserController extends BaseController {
List<SysRole> roles = roleService.selectRolesByUserId(userId); List<SysRole> roles = roleService.selectRolesByUserId(userId);
Map<String, Object> ajax = new HashMap<>(); Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user); ajax.put("user", user);
ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin())); ajax.put("roles", LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin()));
return R.ok(ajax); return R.ok(ajax);
} }

View File

@@ -120,6 +120,6 @@ public class SysRole extends TenantEntity {
} }
public boolean isAdmin() { public boolean isAdmin() {
return UserConstants.ADMIN_ID.equals(this.roleId); return UserConstants.SUPER_ADMIN_ID.equals(this.roleId);
} }
} }

View File

@@ -164,7 +164,7 @@ public class SysUser extends TenantEntity {
} }
public boolean isAdmin() { public boolean isAdmin() {
return UserConstants.ADMIN_ID.equals(this.userId); return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
} }
} }

View File

@@ -1,8 +1,10 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import com.ruoyi.component.log.event.LogininforEvent;
import com.ruoyi.component.mybatis.core.page.PageQuery; import com.ruoyi.component.mybatis.core.page.PageQuery;
import com.ruoyi.component.mybatis.core.page.TableDataInfo; import com.ruoyi.component.mybatis.core.page.TableDataInfo;
import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.system.domain.SysLogininfor;
import org.springframework.context.event.EventListener;
import java.util.List; import java.util.List;
@@ -14,6 +16,9 @@ import java.util.List;
public interface ISysLogininforService { public interface ISysLogininforService {
@EventListener
void recordLogininfor(LogininforEvent logininforEvent);
TableDataInfo<SysLogininfor> selectPageLogininforList(SysLogininfor logininfor, PageQuery pageQuery); TableDataInfo<SysLogininfor> selectPageLogininforList(SysLogininfor logininfor, PageQuery pageQuery);
/** /**

View File

@@ -10,6 +10,7 @@ import com.ruoyi.component.core.constant.CacheConstants;
import com.ruoyi.component.core.constant.Constants; import com.ruoyi.component.core.constant.Constants;
import com.ruoyi.component.core.constant.GlobalConstants; import com.ruoyi.component.core.constant.GlobalConstants;
import com.ruoyi.component.core.domain.dto.RoleDTO; import com.ruoyi.component.core.domain.dto.RoleDTO;
import com.ruoyi.component.core.executor.ExecutorConstant;
import com.ruoyi.component.log.event.LogininforEvent; import com.ruoyi.component.log.event.LogininforEvent;
import com.ruoyi.component.redis.util.RedisUtils; import com.ruoyi.component.redis.util.RedisUtils;
import com.ruoyi.component.tenant.core.TenantEntity; import com.ruoyi.component.tenant.core.TenantEntity;
@@ -33,6 +34,7 @@ import com.ruoyi.component.core.util.spring.SpringUtils;
import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -157,6 +159,9 @@ public class SysLoginService {
} }
} }
@Autowired
private ISysLogininforService sysLogininforService;
/** /**
* 记录登录信息 * 记录登录信息
* *
@@ -171,7 +176,9 @@ public class SysLoginService {
logininforEvent.setStatus(status); logininforEvent.setStatus(status);
logininforEvent.setMessage(message); logininforEvent.setMessage(message);
logininforEvent.setRequest(ServletUtils.getRequest()); logininforEvent.setRequest(ServletUtils.getRequest());
SpringUtils.context().publishEvent(logininforEvent); ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
sysLogininforService.recordLogininfor(logininforEvent);
});
} }
/** /**

View File

@@ -4,6 +4,7 @@ import cn.dev33.satoken.secure.BCrypt;
import com.ruoyi.component.core.constant.CacheConstants; import com.ruoyi.component.core.constant.CacheConstants;
import com.ruoyi.component.core.constant.Constants; import com.ruoyi.component.core.constant.Constants;
import com.ruoyi.component.core.constant.GlobalConstants; import com.ruoyi.component.core.constant.GlobalConstants;
import com.ruoyi.component.core.executor.ExecutorConstant;
import com.ruoyi.component.log.event.LogininforEvent; import com.ruoyi.component.log.event.LogininforEvent;
import com.ruoyi.component.redis.util.RedisUtils; import com.ruoyi.component.redis.util.RedisUtils;
import com.ruoyi.system.domain.SysUser; import com.ruoyi.system.domain.SysUser;
@@ -30,6 +31,7 @@ public class SysRegisterService {
private final ISysUserService userService; private final ISysUserService userService;
private final ISysConfigService configService; private final ISysConfigService configService;
private final ISysLogininforService sysLogininforService;
/** /**
* 注册 * 注册
@@ -96,7 +98,9 @@ public class SysRegisterService {
logininforEvent.setStatus(status); logininforEvent.setStatus(status);
logininforEvent.setMessage(message); logininforEvent.setMessage(message);
logininforEvent.setRequest(ServletUtils.getRequest()); logininforEvent.setRequest(ServletUtils.getRequest());
SpringUtils.context().publishEvent(logininforEvent); ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
sysLogininforService.recordLogininfor(logininforEvent);
});
} }
} }

View File

@@ -204,7 +204,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public void checkDeptDataScope(Long deptId) { public void checkDeptDataScope(Long deptId) {
if (!LoginHelper.isAdmin()) { if (!LoginHelper.isSuperAdmin()) {
SysDept dept = new SysDept(); SysDept dept = new SysDept();
dept.setDeptId(deptId); dept.setDeptId(deptId);
List<SysDept> depts = this.selectDeptList(dept); List<SysDept> depts = this.selectDeptList(dept);

View File

@@ -17,7 +17,6 @@ import com.ruoyi.system.service.ISysLogininforService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@@ -43,8 +42,8 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
* *
* @param logininforEvent 登录事件 * @param logininforEvent 登录事件
*/ */
@Async
@EventListener @EventListener
@Override
public void recordLogininfor(LogininforEvent logininforEvent) { public void recordLogininfor(LogininforEvent logininforEvent) {
HttpServletRequest request = logininforEvent.getRequest(); HttpServletRequest request = logininforEvent.getRequest();
final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));

View File

@@ -64,7 +64,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
public List<SysMenu> selectMenuList(SysMenu menu, Long userId) { public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
List<SysMenu> menuList = null; List<SysMenu> menuList = null;
// 管理员显示所有菜单信息 // 管理员显示所有菜单信息
if (LoginHelper.isAdmin(userId)) { if (LoginHelper.isSuperAdmin(userId)) {
menuList = baseMapper.selectList(new LambdaQueryWrapper<SysMenu>() menuList = baseMapper.selectList(new LambdaQueryWrapper<SysMenu>()
.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
.eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible())
@@ -129,7 +129,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
@Override @Override
public List<SysMenu> selectMenuTreeByUserId(Long userId) { public List<SysMenu> selectMenuTreeByUserId(Long userId) {
List<SysMenu> menus = null; List<SysMenu> menus = null;
if (LoginHelper.isAdmin(userId)) { if (LoginHelper.isSuperAdmin(userId)) {
menus = baseMapper.selectMenuTreeAll(); menus = baseMapper.selectMenuTreeAll();
} else { } else {
menus = baseMapper.selectMenuTreeByUserId(userId); menus = baseMapper.selectMenuTreeByUserId(userId);

View File

@@ -214,7 +214,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/ */
@Override @Override
public void checkRoleDataScope(Long roleId) { public void checkRoleDataScope(Long roleId) {
if (!LoginHelper.isAdmin()) { if (!LoginHelper.isSuperAdmin()) {
SysRole role = new SysRole(); SysRole role = new SysRole();
role.setRoleId(roleId); role.setRoleId(roleId);
List<SysRole> roles = this.selectRoleList(role); List<SysRole> roles = this.selectRoleList(role);

View File

@@ -27,7 +27,7 @@ public class SysSensitiveServiceImpl implements SensitiveService {
*/ */
@Override @Override
public boolean isSensitive() { public boolean isSensitive() {
if(LoginHelper.isAdmin()){ if(LoginHelper.isSuperAdmin()){
return false; return false;
} }
return SENSITIVE; return SENSITIVE;

View File

@@ -251,7 +251,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public void checkUserDataScope(Long userId) { public void checkUserDataScope(Long userId) {
if (!LoginHelper.isAdmin()) { if (!LoginHelper.isSuperAdmin()) {
SysUser user = new SysUser(); SysUser user = new SysUser();
user.setUserId(userId); user.setUserId(userId);
List<SysUser> users = this.selectUserList(user); List<SysUser> users = this.selectUserList(user);