refactor all
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
package com.imyeyu.api.modules.user.bean;
|
||||
|
||||
import com.imyeyu.api.TimiServerAPI;
|
||||
import com.imyeyu.api.bean.CoreRoleCode;
|
||||
import com.imyeyu.api.bean.ModuleCode;
|
||||
import com.imyeyu.api.modules.user.entity.Role;
|
||||
import com.imyeyu.api.modules.user.entity.User;
|
||||
import com.imyeyu.api.modules.user.entity.UserRole;
|
||||
import com.imyeyu.api.modules.user.mapper.RoleMapper;
|
||||
import com.imyeyu.api.modules.user.mapper.UserMapper;
|
||||
import com.imyeyu.java.bean.timi.TimiCode;
|
||||
import com.imyeyu.java.bean.timi.TimiException;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 自举数据常量
|
||||
*
|
||||
* @author 夜雨
|
||||
* @since 2026-06-07 10:42
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class BootstrapData {
|
||||
|
||||
/** System 用户名 */
|
||||
public static final String SYS_USER_NAME = "System";
|
||||
|
||||
/** System 用户昵称 */
|
||||
public static final String SYS_USER_NICK = "System";
|
||||
|
||||
/** System 角色代码 */
|
||||
public static final String SYS_ROLE_CODE = CoreRoleCode.SYSTEM.name();
|
||||
|
||||
/** 管理角色代码 */
|
||||
public static final String ADMIN_ROLE_CODE = CoreRoleCode.ADMIN.name();
|
||||
|
||||
/** System 角色模块 */
|
||||
public static final ModuleCode SYS_ROLE_MODULE_CODE = ModuleCode.CORE;
|
||||
|
||||
/** 管理角色模块 */
|
||||
public static final ModuleCode ADMIN_ROLE_MODULE_CODE = ModuleCode.CORE;
|
||||
|
||||
/** System 角色名称 */
|
||||
public static final String SYS_ROLE_NAME = CoreRoleCode.SYSTEM.getDefaultName();
|
||||
|
||||
/** 管理角色名称 */
|
||||
public static final String ADMIN_ROLE_NAME = CoreRoleCode.ADMIN.getDefaultName();
|
||||
|
||||
/** 自举权限代码集合 */
|
||||
public static final Set<String> PROTECTED_PERMISSION_CODE_SET = BuiltinAuthRegistry.SYSTEM_PERMISSION_CODE_SET;
|
||||
|
||||
public static boolean isProtectedRoleCode(ModuleCode moduleCode, String code) {
|
||||
return BuiltinAuthRegistry.isProtectedRole(moduleCode, code);
|
||||
}
|
||||
|
||||
public static void checkProtectedRoleCode(ModuleCode moduleCode, String code) {
|
||||
if (BootstrapData.isProtectedRoleCode(moduleCode, code)) {
|
||||
throw new TimiException(TimiCode.PERMISSION_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为自举权限
|
||||
*
|
||||
* @param code 权限码
|
||||
* @return 是否为自举权限
|
||||
*/
|
||||
public static boolean isProtectedPermissionCode(BuiltinPermissionCode code) {
|
||||
return code != null && code.isGrantToSystem();
|
||||
}
|
||||
|
||||
public static boolean isProtectedPermissionCode(String code) {
|
||||
return PROTECTED_PERMISSION_CODE_SET.contains(code);
|
||||
}
|
||||
|
||||
public static void checkProtectedPermissionCode(BuiltinPermissionCode code) {
|
||||
if (BootstrapData.isProtectedPermissionCode(code)) {
|
||||
throw new TimiException(TimiCode.PERMISSION_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isProtectedUserRole(UserRole userRole) {
|
||||
if (userRole == null) {
|
||||
return false;
|
||||
}
|
||||
UserMapper userMapper = TimiServerAPI.applicationContext.getBean(UserMapper.class);
|
||||
RoleMapper roleMapper = TimiServerAPI.applicationContext.getBean(RoleMapper.class);
|
||||
|
||||
User user = userMapper.select(userRole.getUserId());
|
||||
if (user == null || !BootstrapData.SYS_USER_NAME.equals(user.getName())) {
|
||||
return false;
|
||||
}
|
||||
Role role = roleMapper.select(userRole.getRoleId());
|
||||
return isProtectedRole(role);
|
||||
}
|
||||
|
||||
public static void checkProtectedUserRole(UserRole userRole) {
|
||||
if (BootstrapData.isProtectedUserRole(userRole)) {
|
||||
throw new TimiException(TimiCode.PERMISSION_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isProtectedRole(Role role) {
|
||||
return role != null && isProtectedRoleCode(role.getModuleCode(), role.getCode());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.imyeyu.api.modules.user.bean;
|
||||
|
||||
import com.imyeyu.api.bean.CorePermissionCode;
|
||||
import com.imyeyu.api.bean.CoreRoleCode;
|
||||
import com.imyeyu.api.bean.ModuleCode;
|
||||
import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
||||
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
///
|
||||
/// 内建权限与角色注册中心
|
||||
///
|
||||
/// @author Codex
|
||||
/// @since 2026-07-28
|
||||
public final class BuiltinAuthRegistry {
|
||||
|
||||
private BuiltinAuthRegistry() {
|
||||
}
|
||||
|
||||
/// 内建权限列表
|
||||
public static final List<BuiltinPermissionCode> PERMISSION_CODE_LIST = Stream.concat(
|
||||
Arrays.stream(CorePermissionCode.values()),
|
||||
Arrays.stream(GaoPermissionCode.values())
|
||||
).map(BuiltinPermissionCode.class::cast).toList();
|
||||
|
||||
/// 内建角色列表
|
||||
public static final List<BuiltinRoleCode> ROLE_CODE_LIST = Stream.concat(
|
||||
Arrays.stream(CoreRoleCode.values()),
|
||||
Arrays.stream(GaoRoleCode.values())
|
||||
).map(BuiltinRoleCode.class::cast).toList();
|
||||
|
||||
/// SYSTEM 角色必有权限集合
|
||||
public static final Set<String> SYSTEM_PERMISSION_CODE_SET = PERMISSION_CODE_LIST.stream()
|
||||
.filter(BuiltinPermissionCode::isGrantToSystem)
|
||||
.map(BuiltinPermissionCode::getValue)
|
||||
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||
|
||||
/// 受保护角色集合
|
||||
public static final Set<String> PROTECTED_ROLE_KEY_SET = ROLE_CODE_LIST.stream()
|
||||
.filter(BuiltinRoleCode::isProtected)
|
||||
.map(item -> toRoleKey(item.getModuleCode(), ((Enum<?>) item).name()))
|
||||
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||
|
||||
public static String toRoleKey(ModuleCode moduleCode, String code) {
|
||||
return "%s:%s".formatted(moduleCode.name(), code);
|
||||
}
|
||||
|
||||
public static String toPermissionKey(ModuleCode moduleCode, String code) {
|
||||
return "%s:%s".formatted(moduleCode.name(), code);
|
||||
}
|
||||
|
||||
public static boolean isProtectedRole(ModuleCode moduleCode, String code) {
|
||||
return PROTECTED_ROLE_KEY_SET.contains(toRoleKey(moduleCode, code));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.imyeyu.api.modules.user.bean;
|
||||
|
||||
import com.imyeyu.api.bean.ModuleCode;
|
||||
|
||||
///
|
||||
/// 内建权限定义
|
||||
///
|
||||
/// @author Codex
|
||||
/// @since 2026-07-28
|
||||
public interface BuiltinPermissionCode {
|
||||
|
||||
/// 权限模块
|
||||
///
|
||||
/// @return 模块代码
|
||||
ModuleCode getModuleCode();
|
||||
|
||||
/// 权限值
|
||||
///
|
||||
/// @return 权限值
|
||||
String getValue();
|
||||
|
||||
/// 默认名称
|
||||
///
|
||||
/// @return 默认名称
|
||||
String getDefaultName();
|
||||
|
||||
/// true 为初始化时授权给 SYSTEM 角色
|
||||
///
|
||||
/// @return 是否授权给 SYSTEM 角色
|
||||
boolean isGrantToSystem();
|
||||
|
||||
/// true 为初始化时授权给 ADMIN 角色
|
||||
///
|
||||
/// @return 是否授权给 ADMIN 角色
|
||||
boolean isGrantToAdmin();
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.imyeyu.api.modules.user.bean;
|
||||
|
||||
import com.imyeyu.api.bean.ModuleCode;
|
||||
|
||||
///
|
||||
/// 内建角色定义
|
||||
///
|
||||
/// @author Codex
|
||||
/// @since 2026-07-28
|
||||
public interface BuiltinRoleCode {
|
||||
|
||||
/// 角色模块
|
||||
///
|
||||
/// @return 模块代码
|
||||
ModuleCode getModuleCode();
|
||||
|
||||
/// 默认名称
|
||||
///
|
||||
/// @return 默认名称
|
||||
String getDefaultName();
|
||||
|
||||
/// true 为受保护角色
|
||||
///
|
||||
/// @return 是否受保护
|
||||
boolean isProtected();
|
||||
|
||||
/// 父角色代码
|
||||
///
|
||||
/// @return 父角色代码
|
||||
String getParentCode();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.imyeyu.api.modules.user.bean;
|
||||
|
||||
///
|
||||
///
|
||||
/// @author 夜雨
|
||||
/// @since 2026-07-30 14:35
|
||||
public enum Gender {
|
||||
|
||||
MALE,
|
||||
|
||||
FEMALE,
|
||||
}
|
||||
Reference in New Issue
Block a user