fix: 优化逻辑
This commit is contained in:
parent
57cc61f1c0
commit
d14b6d6eba
@ -237,6 +237,8 @@ public class SmsVerifyCodeController {
|
||||
SysUserTenant sysUserTenant = new SysUserTenant();
|
||||
sysUserTenant.setTenantId(tenantId);
|
||||
sysUserTenant.setUserId(user.getId());
|
||||
sysUserTenant.setId(user.getId());
|
||||
// sysUserTenant.setOperateTime(new Date());
|
||||
userTenantMapper.insert(sysUserTenant);
|
||||
this.addDefaultRole(savedUser.getId(), smsVerifyCodeRequest);
|
||||
}
|
||||
|
||||
@ -126,8 +126,9 @@ public class SysMenuController {
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> getMenuTreeByUser(@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
|
||||
SysUser userInfo = userService.getUserInfo();
|
||||
boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
|
||||
String id = "";
|
||||
if (0 != userInfo.getUsertype()) {
|
||||
if (0 != userInfo.getUsertype() && !superAdmin) {
|
||||
id = userInfo.getId();
|
||||
}
|
||||
return sysMenuService.getMenuTree(id, tenantId);
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package com.yfd.platform.system.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@ -27,4 +29,11 @@ public class SysUserTenant implements Serializable {
|
||||
|
||||
/** 门户ID */
|
||||
private String tenantId;
|
||||
|
||||
@TableField("OPERATOR")
|
||||
private String operator;
|
||||
|
||||
@TableField("OPERATE_TIME")
|
||||
private Date operateTime;
|
||||
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
* userid 用户id
|
||||
* 返回值说明:
|
||||
************************************/
|
||||
boolean addUserRoles(@Param("id")String id,@Param("roleid") String roleid,@Param("userid") String userid);
|
||||
boolean addUserRoles(@Param("operator") String operator,@Param("id")String id,@Param("roleid") String roleid,@Param("userid") String userid);
|
||||
|
||||
/***********************************
|
||||
* 用途说明:根据用户id 和角色id 查询 系统角色用户对照表
|
||||
|
||||
@ -28,7 +28,7 @@ public interface SysUserTenantMapper extends BaseMapper<SysUserTenant> {
|
||||
/**
|
||||
* 批量新增用户-门户关联
|
||||
*/
|
||||
int batchInsert(@Param("userId") String userId, @Param("tenantIds") List<String> tenantIds);
|
||||
int batchInsert(@Param("operator") String operator,@Param("userId") String userId, @Param("tenantIds") List<String> tenantIds);
|
||||
|
||||
/**
|
||||
* 查询某门户下的所有用户ID
|
||||
|
||||
@ -66,7 +66,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
|
||||
|
||||
// 构建权限过滤条件
|
||||
Set<String> allowedOrgIds = new HashSet<>();
|
||||
if (userInfo.getUsertype() != 0) {
|
||||
boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
|
||||
if (userInfo.getUsertype() != 0 && !superAdmin) {
|
||||
List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId());
|
||||
for (SysRole sysRole : roleByUserId) {
|
||||
String orgscope = sysRole.getOrgscope();
|
||||
@ -253,7 +254,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
|
||||
|
||||
// 收集所有允许的组织ID
|
||||
Set<String> allowedOrgIds = new HashSet<>();
|
||||
if (userInfo.getUsertype() != 0) {
|
||||
boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
|
||||
if (userInfo.getUsertype() != 0 && !superAdmin) {
|
||||
List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId());
|
||||
for (SysRole sysRole : roleByUserId) {
|
||||
String orgscope = sysRole.getOrgscope();
|
||||
|
||||
@ -20,6 +20,7 @@ import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
|
||||
import com.yfd.platform.system.domain.LoginUser;
|
||||
import com.yfd.platform.system.domain.SysRole;
|
||||
import com.yfd.platform.system.domain.SysUser;
|
||||
import com.yfd.platform.system.domain.SysUserTenant;
|
||||
import com.yfd.platform.system.mapper.SysRoleMapper;
|
||||
import com.yfd.platform.system.mapper.SysUserMapper;
|
||||
import com.yfd.platform.system.mapper.SysUserTenantMapper;
|
||||
@ -184,19 +185,24 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
//系统生成id
|
||||
String id = IdUtil.fastSimpleUUID();
|
||||
//新增sys_role_users表数据
|
||||
ok = ok && sysUserMapper.addUserRoles(id, roleid,
|
||||
sysUser.getId());
|
||||
ok = ok && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, sysUser.getId());
|
||||
}
|
||||
}
|
||||
//判断新增是否成功 消息提示
|
||||
if (ok) {
|
||||
// 插入用户-门户关联
|
||||
String tenantId = sysUser.getTenantId();
|
||||
if (StrUtil.isNotBlank(tenantId)) {
|
||||
List<String> tenantIds = new ArrayList<>();
|
||||
tenantIds.add(tenantId);
|
||||
sysUserTenantMapper.batchInsert(sysUser.getId(), tenantIds);
|
||||
List<String> ids = StrUtil.split(roleids, ",");
|
||||
if(!ids.isEmpty()) {
|
||||
List<SysRole> selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, ids).select(SysRole::getTenantId));
|
||||
List<String> tenantIds = selectedList.stream().map(SysRole::getTenantId).distinct().toList();
|
||||
sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(), sysUser.getId(), tenantIds);
|
||||
}
|
||||
// String tenantId = sysUser.getTenantId();
|
||||
// if (StrUtil.isNotBlank(tenantId)) {
|
||||
// List<String> tenantIds = new ArrayList<>();
|
||||
// tenantIds.add(tenantId);
|
||||
// sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(),sysUser.getId(), tenantIds);
|
||||
// }
|
||||
result.put("status", "sucess");
|
||||
result.put("msg", "新增用户成功!");
|
||||
|
||||
@ -282,6 +288,14 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
return result;
|
||||
}
|
||||
|
||||
// 根据角色给用户分配门户
|
||||
sysUserTenantMapper.deleteByUserId(sysUser.getId());
|
||||
if(StrUtil.isNotBlank(roleids)) {
|
||||
List<String> ids = StrUtil.split(roleids, ",");
|
||||
List<SysRole> selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, ids).select(SysRole::getTenantId));
|
||||
List<String> tenantIds = selectedList.stream().map(SysRole::getTenantId).distinct().toList();
|
||||
sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(), sysUser.getId(), tenantIds);
|
||||
}
|
||||
// 处理角色分配
|
||||
String userId = sysUser.getId();
|
||||
if (StrUtil.isNotEmpty(roleids)) {
|
||||
@ -362,7 +376,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
for (String roleId : newRoles) {
|
||||
if (!currentRoleSet.contains(roleId)) {
|
||||
String id = IdUtil.fastSimpleUUID();
|
||||
sysUserMapper.addUserRoles(id, roleId, userId);
|
||||
sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleId, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -419,7 +433,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
//系统生成id
|
||||
String id = IdUtil.fastSimpleUUID();
|
||||
//新增sys_role_users表数据
|
||||
isOk = isOk && sysUserMapper.addUserRoles(id, roleid, userid);
|
||||
isOk = isOk && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
|
||||
}
|
||||
}
|
||||
return isOk;
|
||||
@ -594,7 +608,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
//系统生成id
|
||||
String id = IdUtil.fastSimpleUUID();
|
||||
//新增sys_role_users表数据
|
||||
isOk = sysUserMapper.addUserRoles(id, roleid, userid);
|
||||
isOk = sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
|
||||
}
|
||||
return isOk;
|
||||
}
|
||||
@ -952,7 +966,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
if (StrUtil.isBlank(userId) || tenantIds == null || tenantIds.isEmpty()) {
|
||||
throw new RuntimeException("用户ID和门户ID列表不能为空");
|
||||
}
|
||||
sysUserTenantMapper.batchInsert(userId, tenantIds);
|
||||
sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(),userId, tenantIds);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -980,9 +994,9 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
|
||||
|
||||
|
||||
public boolean isSuperAdmin(String userId) {
|
||||
// String maxLevel = sysUserMapper.getMaxLevel(userId);
|
||||
String maxLevel = sysUserMapper.getMaxLevel(userId);
|
||||
SysUser sysUser = sysUserMapper.selectById(userId);
|
||||
return sysUser!=null && sysUser.getUsertype()==0;
|
||||
return (sysUser!=null && sysUser.getUsertype()==0) || "1".equals(maxLevel);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -92,6 +92,8 @@ public class DataSourceRequestUtil {
|
||||
|
||||
List<String> excludes = excludeFields != null ? excludeFields : new ArrayList<>();
|
||||
|
||||
applySelect(request, wrapper, entityClass, fieldMapping, excludes);
|
||||
|
||||
applyFilters(request.getFilter(), wrapper, entityClass, fieldMapping, excludes, "and");
|
||||
|
||||
applySort(request.getSort(), wrapper, entityClass);
|
||||
@ -145,6 +147,49 @@ public class DataSourceRequestUtil {
|
||||
return service.list(wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用查询字段(select / distinctSelect)
|
||||
* distinctSelect 优先于 select,并附带 DISTINCT 去重
|
||||
*/
|
||||
private static <T> void applySelect(DataSourceRequest request,
|
||||
QueryWrapper<T> wrapper,
|
||||
Class<T> entityClass,
|
||||
Map<String, String> fieldMapping,
|
||||
List<String> excludeFields) {
|
||||
List<String> selectFields = request.getSelect();
|
||||
boolean distinct = false;
|
||||
if (CollectionUtil.isNotEmpty(request.getDistinctSelect())) {
|
||||
selectFields = request.getDistinctSelect();
|
||||
distinct = true;
|
||||
}
|
||||
|
||||
if (CollectionUtil.isEmpty(selectFields)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> columns = new ArrayList<>();
|
||||
for (String field : selectFields) {
|
||||
if (StrUtil.isBlank(field) || excludeFields.contains(field)) {
|
||||
continue;
|
||||
}
|
||||
String columnName = getColumnName(field, entityClass, fieldMapping);
|
||||
if (columnName != null) {
|
||||
columns.add(columnName);
|
||||
}
|
||||
}
|
||||
|
||||
if (columns.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String[] columnArray = columns.toArray(new String[0]);
|
||||
if (distinct) {
|
||||
// MyBatis-Plus 3.5.16 无 wrapper.distinct() 方法,在首个查询列前加 DISTINCT 关键字实现去重
|
||||
columnArray[0] = "DISTINCT " + columnArray[0];
|
||||
}
|
||||
wrapper.select(columnArray);
|
||||
}
|
||||
|
||||
private static <T> void applyFilters(DataSourceRequest.FilterDescriptor filter,
|
||||
QueryWrapper<T> wrapper,
|
||||
Class<T> entityClass,
|
||||
|
||||
@ -123,7 +123,7 @@
|
||||
FROM sys_role_users
|
||||
WHERE userid = #{id}
|
||||
</select>
|
||||
<!--查询角色列表(Oracle 兼容版)-->
|
||||
<!--查询角色列表(Oracle 兼容版) AND r."LEVEL" != '1'-->
|
||||
<select id="selectRoleList" resultType="com.yfd.platform.system.domain.SysRole">
|
||||
SELECT r.id, r.rolecode, r.rolename, r."LEVEL", r.description,
|
||||
r.orgscope, r.optscope, r.busscope, r.isvaild,
|
||||
@ -136,7 +136,6 @@
|
||||
<if test="tenantId != null and tenantId != ''">
|
||||
AND r.tenant_id = #{tenantId}
|
||||
</if>
|
||||
AND r."LEVEL" != '1'
|
||||
</where>
|
||||
ORDER BY r."LEVEL" ASC, lastmodifydate ASC
|
||||
</select>
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
<!--用户分配角色 系统角色用户对照新增数据-->
|
||||
<insert id="addUserRoles">
|
||||
insert into sys_role_users values (#{id},#{roleid},#{userid})
|
||||
insert into sys_role_users(operator,id,roleid,userid) values (#{operator},#{id},#{roleid},#{userid})
|
||||
</insert>
|
||||
|
||||
<!--根据用户id 和角色id 查询 系统角色用户对照表-->
|
||||
|
||||
@ -22,14 +22,15 @@
|
||||
<foreach collection="tenantIds" item="tenantId" index="index" separator="UNION ALL">
|
||||
SELECT
|
||||
#{userId, jdbcType=VARCHAR} AS USER_ID,
|
||||
#{operator} AS OPERATOR,
|
||||
#{tenantId, jdbcType=VARCHAR} AS TENANT_ID
|
||||
FROM DUAL
|
||||
</foreach>
|
||||
) S
|
||||
ON (T.USER_ID = S.USER_ID AND T.TENANT_ID = S.TENANT_ID)
|
||||
WHEN NOT MATCHED THEN
|
||||
INSERT (ID, USER_ID, TENANT_ID)
|
||||
VALUES (SYS_GUID(), S.USER_ID, S.TENANT_ID)
|
||||
INSERT (ID, USER_ID, TENANT_ID, OPERATOR)
|
||||
VALUES (SYS_GUID(), S.USER_ID, S.TENANT_ID, S.OPERATOR)
|
||||
</insert>
|
||||
|
||||
<!-- 删除指定用户和指定门户的关联 -->
|
||||
|
||||
Loading…
Reference in New Issue
Block a user