forked from github/cool-admin-java
refactor: 超管判断从硬编码admin用户名改为基于角色判断,支持多超管账号
This commit is contained in:
@@ -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中的信息
|
||||
|
||||
+2
-1
@@ -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 -> {
|
||||
|
||||
+1
-1
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user