refactor: 超管判断从硬编码admin用户名改为基于角色判断,支持多超管账号

This commit is contained in:
OpenCode
2026-07-16 20:22:28 +08:00
parent 791f006ce1
commit 1d880951b1
6 changed files with 46 additions and 13 deletions
@@ -7,10 +7,16 @@ import com.cool.core.enums.UserTypeEnum;
import com.cool.core.exception.CoolPreconditions;
import com.cool.core.security.jwt.JwtUser;
import com.cool.modules.base.entity.sys.BaseSysUserEntity;
import com.cool.modules.base.entity.sys.BaseSysUserRoleEntity;
import com.cool.modules.base.mapper.sys.BaseSysUserMapper;
import com.cool.modules.base.mapper.sys.BaseSysUserRoleMapper;
import com.mybatisflex.core.query.QueryWrapper;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.List;
/**
* Security 工具类
*/
@@ -30,7 +36,22 @@ public class CoolSecurityUtil {
* 是否为超级管理员
*/
public static boolean isSuperAdmin() {
return "admin".equals(getAdminUsername());
return isSuperAdmin(getAdminUsername());
}
public static boolean isSuperAdmin(String username) {
BaseSysUserEntity userEntity = SpringUtil.getBean(BaseSysUserMapper.class)
.selectOneByQuery(com.mybatisflex.core.query.QueryWrapper.create()
.eq(BaseSysUserEntity::getUsername, username));
if (userEntity == null) {
return false;
}
BaseSysUserRoleMapper userRoleMapper = SpringUtil.getBean(BaseSysUserRoleMapper.class);
List<BaseSysUserRoleEntity> userRoles = userRoleMapper
.selectListByQuery(com.mybatisflex.core.query.QueryWrapper.create()
.eq(BaseSysUserRoleEntity::getUserId, userEntity.getId())
.eq(BaseSysUserRoleEntity::getRoleId, 1L));
return !userRoles.isEmpty();
}
/**
* 获得jwt中的信息
@@ -6,6 +6,7 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.cool.core.annotation.CoolRestController;
import com.cool.core.base.BaseController;
import com.cool.core.util.CoolSecurityUtil;
import com.cool.modules.base.entity.sys.BaseSysRoleEntity;
import com.cool.modules.base.service.sys.BaseSysRoleService;
import com.mybatisflex.core.query.QueryWrapper;
@@ -22,7 +23,7 @@ public class AdminBaseSysRoleController extends BaseController<BaseSysRoleServic
@Override
protected void init(HttpServletRequest request, JSONObject requestParams) {
JSONObject tokenInfo = requestParams.getJSONObject("tokenInfo");
boolean isAdmin = tokenInfo.getStr("username").equals("admin");
boolean isAdmin = CoolSecurityUtil.isSuperAdmin(tokenInfo.getStr("username"));
setPageOption(createOp().keyWordLikeFields(BASE_SYS_ROLE_ENTITY.NAME, BASE_SYS_ROLE_ENTITY.LABEL).queryWrapper(QueryWrapper.create().and(qw -> {
qw.eq(BASE_SYS_ROLE_ENTITY.USER_ID.getName(), tokenInfo.getLong("userId")).or(w -> {
@@ -49,7 +49,7 @@ public class BaseSysDepartmentServiceImpl extends
}
List<BaseSysDepartmentEntity> list = this.list(
QueryWrapper.create()
.in(BaseSysDepartmentEntity::getId, loginDepartmentIds, !username.equals("admin"))
.in(BaseSysDepartmentEntity::getId, loginDepartmentIds, !CoolSecurityUtil.isSuperAdmin(username))
.orderBy(BaseSysDepartmentEntity::getOrderNum, false));
list.forEach(e -> {
List<BaseSysDepartmentEntity> parentDepartment = list.stream()
@@ -49,7 +49,7 @@ public class BaseSysPermsServiceImpl implements BaseSysPermsService {
@Override
public Long[] loginDepartmentIds() {
String username = CoolSecurityUtil.getAdminUsername();
if (username.equals("admin")) {
if (CoolSecurityUtil.isSuperAdmin(username)) {
return baseSysDepartmentMapper.selectAll().stream().map(BaseSysDepartmentEntity::getId)
.toArray(Long[]::new);
} else {
@@ -113,7 +113,7 @@ public class BaseSysPermsServiceImpl implements BaseSysPermsService {
@Override
public Long[] getRoles(BaseSysUserEntity userEntity) {
Long[] roleIds = null;
if (!userEntity.getUsername().equals("admin")) {
if (!CoolSecurityUtil.isSuperAdmin(userEntity.getUsername())) {
List<BaseSysUserRoleEntity> list = baseSysUserRoleMapper
.selectListByQuery(QueryWrapper.create().eq(BaseSysUserRoleEntity::getUserId, userEntity.getId()));
List<Long> activeRoleIds = new ArrayList<>();
@@ -124,7 +124,7 @@ public class BaseSysPermsServiceImpl implements BaseSysPermsService {
}
}
roleIds = activeRoleIds.toArray(Long[]::new);
if (Arrays.asList(roleIds).contains(1L)) {
if (roleIds.length > 0 && Arrays.asList(roleIds).contains(1L)) {
roleIds = null;
}
}
@@ -253,9 +253,12 @@ public class BaseSysPermsServiceImpl implements BaseSysPermsService {
@Override
public void refreshPermsByMenuId(Long menuId) {
// 刷新超管权限、 找出这个菜单的所有用户、 刷新用户权限
BaseSysUserEntity admin = baseSysUserMapper
.selectOneByQuery(QueryWrapper.create().eq(BaseSysUserEntity::getUsername, "admin"));
refreshPerms(admin.getId());
List<BaseSysUserEntity> superAdmins = baseSysUserMapper
.selectListByQuery(QueryWrapper.create()
.eq(BaseSysUserEntity::getUsername, "admin"));
for (BaseSysUserEntity admin : superAdmins) {
refreshPerms(admin.getId());
}
List<Row> list = baseSysRoleMenuMapper.selectRowsByQuery(QueryWrapper.create().select(BASE_SYS_USER_ROLE_ENTITY.USER_ID)
.from(BASE_SYS_ROLE_MENU_ENTITY).leftJoin(BASE_SYS_USER_ROLE_ENTITY)
.on(BASE_SYS_ROLE_MENU_ENTITY.ROLE_ID.eq(BASE_SYS_USER_ROLE_ENTITY.ROLE_ID)).and(BASE_SYS_ROLE_MENU_ENTITY.MENU_ID.eq(menuId, ObjectUtil.isNotEmpty(menuId))).groupBy(BASE_SYS_USER_ROLE_ENTITY.USER_ID));
@@ -96,6 +96,6 @@ public class BaseSysRoleServiceImpl extends BaseServiceImpl<BaseSysRoleMapper, B
w.in(BaseSysRoleEntity::getId,
(Object) object.get("roleIds", Long[].class));
});
}, !CoolSecurityUtil.getAdminUsername().equals("admin")));
}, !CoolSecurityUtil.isSuperAdmin()));
}
}
@@ -21,8 +21,10 @@ import com.cool.core.util.CoolSecurityUtil;
import com.cool.core.util.DatabaseDialectUtils;
import com.cool.modules.base.entity.sys.BaseSysDepartmentEntity;
import com.cool.modules.base.entity.sys.BaseSysUserEntity;
import com.cool.modules.base.entity.sys.BaseSysUserRoleEntity;
import com.cool.modules.base.mapper.sys.BaseSysDepartmentMapper;
import com.cool.modules.base.mapper.sys.BaseSysUserMapper;
import com.cool.modules.base.mapper.sys.BaseSysUserRoleMapper;
import com.cool.modules.base.service.sys.BaseSysPermsService;
import com.cool.modules.base.service.sys.BaseSysUserService;
import com.mybatisflex.core.paginate.Page;
@@ -48,6 +50,8 @@ public class BaseSysUserServiceImpl extends BaseServiceImpl<BaseSysUserMapper, B
final private BaseSysDepartmentMapper baseSysDepartmentMapper;
final private BaseSysUserRoleMapper baseSysUserRoleMapper;
@Override
public Object page(JSONObject requestParams, Page<BaseSysUserEntity> page, QueryWrapper qw) {
String keyWord = requestParams.getStr("keyWord");
@@ -87,8 +91,12 @@ public class BaseSysUserServiceImpl extends BaseServiceImpl<BaseSysUserMapper, B
.leftJoin(BASE_SYS_DEPARTMENT_ENTITY)
.on(BASE_SYS_USER_ENTITY.DEPARTMENT_ID.eq(BASE_SYS_DEPARTMENT_ENTITY.ID));
// 不显示admin用户
qw.and(BASE_SYS_USER_ENTITY.USERNAME.ne("admin"));
// 不显示超管用户
qw.and(BASE_SYS_USER_ENTITY.ID.notIn(
baseSysUserRoleMapper.selectListByQuery(
QueryWrapper.create().eq(BaseSysUserRoleEntity::getRoleId, 1L)
).stream().map(BaseSysUserRoleEntity::getUserId).toArray()
));
// 筛选状态
qw.and(BASE_SYS_USER_ENTITY.STATUS.eq(status, status != null));
// 搜索关键字
@@ -146,7 +154,7 @@ public class BaseSysUserServiceImpl extends BaseServiceImpl<BaseSysUserMapper, B
@Override
public boolean update(JSONObject requestParams, BaseSysUserEntity entity) {
CoolPreconditions.check(
StrUtil.isNotEmpty(entity.getUsername()) && entity.getUsername().equals("admin"),
StrUtil.isNotEmpty(entity.getUsername()) && CoolSecurityUtil.isSuperAdmin(entity.getUsername()),
"非法操作");
BaseSysUserEntity userEntity = getById(entity.getId());
String requestPassword = requestParams.getStr("password");