refactor all
This commit is contained in:
@@ -0,0 +1,222 @@
|
||||
package com.imyeyu.api.util;
|
||||
|
||||
import com.imyeyu.api.config.dbsource.TimiServerDBConfig;
|
||||
import com.imyeyu.api.bean.ModuleCode;
|
||||
import com.imyeyu.api.modules.common.bean.ImageType;
|
||||
import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
||||
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
||||
import com.imyeyu.api.modules.system.service.LoggerService;
|
||||
import com.imyeyu.api.modules.user.bean.BootstrapData;
|
||||
import com.imyeyu.api.modules.user.bean.BuiltinAuthRegistry;
|
||||
import com.imyeyu.api.modules.user.bean.BuiltinPermissionCode;
|
||||
import com.imyeyu.api.modules.user.bean.BuiltinRoleCode;
|
||||
import com.imyeyu.api.modules.user.entity.Permission;
|
||||
import com.imyeyu.api.modules.user.entity.Role;
|
||||
import com.imyeyu.api.modules.user.entity.RolePermission;
|
||||
import com.imyeyu.api.modules.user.entity.RoleRelation;
|
||||
import com.imyeyu.api.modules.user.entity.User;
|
||||
import com.imyeyu.api.modules.user.entity.UserRole;
|
||||
import com.imyeyu.api.modules.user.mapper.PermissionMapper;
|
||||
import com.imyeyu.api.modules.user.mapper.RoleMapper;
|
||||
import com.imyeyu.api.modules.user.mapper.RolePermissionMapper;
|
||||
import com.imyeyu.api.modules.user.mapper.RoleRelationMapper;
|
||||
import com.imyeyu.api.modules.user.mapper.UserRoleMapper;
|
||||
import com.imyeyu.api.modules.user.service.PermissionService;
|
||||
import com.imyeyu.api.modules.user.service.RoleRelationService;
|
||||
import com.imyeyu.api.modules.user.service.RoleService;
|
||||
import com.imyeyu.api.modules.user.service.UserRoleService;
|
||||
import com.imyeyu.api.modules.user.service.UserService;
|
||||
import com.imyeyu.java.TimiJava;
|
||||
import com.imyeyu.utils.Text;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 内建数据初始化器
|
||||
*
|
||||
* @author 夜雨
|
||||
* @since 2026-06-05 15:45
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class InitBuiltinUser implements ApplicationRunner {
|
||||
|
||||
private final RoleService roleService;
|
||||
private final UserService userService;
|
||||
private final LoggerService loggerService;
|
||||
private final UserRoleService userRoleService;
|
||||
private final PermissionService permissionService;
|
||||
private final RoleRelationService roleRelationService;
|
||||
|
||||
private final RoleMapper roleMapper;
|
||||
private final UserRoleMapper userRoleMapper;
|
||||
private final PermissionMapper permissionMapper;
|
||||
private final RolePermissionMapper rolePermissionMapper;
|
||||
private final RoleRelationMapper roleRelationMapper;
|
||||
|
||||
/**
|
||||
* 初始化内建数据
|
||||
*
|
||||
* @param args 启动参数
|
||||
* @throws Exception 初始化异常
|
||||
*/
|
||||
@Override
|
||||
@Transactional(TimiServerDBConfig.ROLLBACKER)
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
// 先同步所有内建权限和角色,再补齐继承与默认授权关系
|
||||
Map<String, Permission> permissionMap = initBuiltinPermissionMap();
|
||||
Map<String, Role> roleMap = initBuiltinRoleMap();
|
||||
bindBuiltinRoleRelation(roleMap);
|
||||
bindBuiltinPermission(roleMap, permissionMap);
|
||||
|
||||
Role systemRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(BootstrapData.SYS_ROLE_MODULE_CODE, BootstrapData.SYS_ROLE_CODE));
|
||||
// 初始化系统用户
|
||||
User user = userService.getByName(BootstrapData.SYS_USER_NAME);
|
||||
if (user == null) {
|
||||
// 创建
|
||||
String password = Text.randomPassword(32);
|
||||
|
||||
user = new User();
|
||||
user.setName(BootstrapData.SYS_USER_NAME);
|
||||
user.setNick(BootstrapData.SYS_USER_NICK);
|
||||
user.setPassword(password);
|
||||
user.setWrapperType(ImageType.PIXELATED);
|
||||
user.setAvatarType(ImageType.PIXELATED);
|
||||
user.setExp(0);
|
||||
userService.create(user);
|
||||
|
||||
String logContent = "初始化 %s 自举用户成功,请立即修改密码:%s".formatted(BootstrapData.SYS_USER_NAME, password);
|
||||
loggerService.info("SYSTEM", "INITIALIZE_SYSTEM_USER", user.getId(), logContent, null);
|
||||
}
|
||||
// 授权系统用户角色
|
||||
{
|
||||
UserRole example = new UserRole();
|
||||
example.setUserId(user.getId());
|
||||
example.setRoleId(systemRole.getId());
|
||||
if (userRoleMapper.selectByExample(example) != null) {
|
||||
return;
|
||||
}
|
||||
UserRole userRole = new UserRole();
|
||||
userRole.setUserId(user.getId());
|
||||
userRole.setRoleId(systemRole.getId());
|
||||
userRoleService.create(userRole);
|
||||
}
|
||||
}
|
||||
|
||||
/// 按内建定义补齐权限表,不存在才创建
|
||||
///
|
||||
/// @return 权限代码到权限实体的映射
|
||||
private Map<String, Permission> initBuiltinPermissionMap() {
|
||||
Map<String, Permission> permissionMap = new LinkedHashMap<>();
|
||||
for (BuiltinPermissionCode item : BuiltinAuthRegistry.PERMISSION_CODE_LIST) {
|
||||
Permission example = new Permission();
|
||||
example.setModuleCode(item.getModuleCode());
|
||||
example.setCode(item.getValue());
|
||||
Permission permission = permissionMapper.selectByExample(example);
|
||||
if (permission == null) {
|
||||
permission = new Permission();
|
||||
permission.setModuleCode(item.getModuleCode());
|
||||
permission.setCode(item.getValue());
|
||||
permission.setName(item.getDefaultName());
|
||||
permissionService.create(permission);
|
||||
permission = permissionMapper.selectByExample(example);
|
||||
}
|
||||
permissionMap.put(BuiltinAuthRegistry.toPermissionKey(item.getModuleCode(), item.getValue()), permission);
|
||||
}
|
||||
return permissionMap;
|
||||
}
|
||||
|
||||
/// 按内建定义补齐角色表,不存在才创建
|
||||
///
|
||||
/// @return 模块加角色代码到角色实体的映射
|
||||
private Map<String, Role> initBuiltinRoleMap() {
|
||||
Map<String, Role> roleMap = new LinkedHashMap<>();
|
||||
for (BuiltinRoleCode item : BuiltinAuthRegistry.ROLE_CODE_LIST) {
|
||||
String code = ((Enum<?>) item).name();
|
||||
Role example = new Role();
|
||||
example.setModuleCode(item.getModuleCode());
|
||||
example.setCode(code);
|
||||
Role role = roleMapper.selectByExample(example);
|
||||
if (role == null) {
|
||||
role = new Role();
|
||||
role.setModuleCode(item.getModuleCode());
|
||||
role.setCode(code);
|
||||
role.setName(item.getDefaultName());
|
||||
roleService.create(role);
|
||||
role = roleMapper.selectByExample(example);
|
||||
}
|
||||
roleMap.put(BuiltinAuthRegistry.toRoleKey(item.getModuleCode(), code), role);
|
||||
}
|
||||
return roleMap;
|
||||
}
|
||||
|
||||
/// 按角色定义补齐父子角色关系
|
||||
///
|
||||
/// @param roleMap 已同步的角色映射
|
||||
private void bindBuiltinRoleRelation(Map<String, Role> roleMap) {
|
||||
for (BuiltinRoleCode item : BuiltinAuthRegistry.ROLE_CODE_LIST) {
|
||||
if (TimiJava.isEmpty(item.getParentCode())) {
|
||||
continue;
|
||||
}
|
||||
Role parentRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(item.getModuleCode(), item.getParentCode()));
|
||||
Role childRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(item.getModuleCode(), ((Enum<?>) item).name()));
|
||||
if (parentRole == null || childRole == null) {
|
||||
continue;
|
||||
}
|
||||
RoleRelation relation = new RoleRelation();
|
||||
relation.setParentRoleId(parentRole.getId());
|
||||
relation.setChildRoleId(childRole.getId());
|
||||
if (roleRelationMapper.selectByExample(relation) == null) {
|
||||
roleRelationService.create(relation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 按权限定义补齐 SYSTEM 和 ADMIN 的默认权限
|
||||
///
|
||||
/// @param roleMap 已同步的角色映射
|
||||
/// @param permissionMap 已同步的权限映射
|
||||
private void bindBuiltinPermission(Map<String, Role> roleMap, Map<String, Permission> permissionMap) {
|
||||
Role systemRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(BootstrapData.SYS_ROLE_MODULE_CODE, BootstrapData.SYS_ROLE_CODE));
|
||||
Role adminRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(BootstrapData.ADMIN_ROLE_MODULE_CODE, BootstrapData.ADMIN_ROLE_CODE));
|
||||
Role gaoStoreManagerRole = roleMap.get(BuiltinAuthRegistry.toRoleKey(ModuleCode.GAO, GaoRoleCode.STORE_MANAGER.name()));
|
||||
for (BuiltinPermissionCode item : BuiltinAuthRegistry.PERMISSION_CODE_LIST) {
|
||||
Permission permission = permissionMap.get(BuiltinAuthRegistry.toPermissionKey(item.getModuleCode(), item.getValue()));
|
||||
if (permission == null) {
|
||||
continue;
|
||||
}
|
||||
if (item.isGrantToSystem() && systemRole != null) {
|
||||
createRolePermissionIfAbsent(systemRole.getId(), permission.getId());
|
||||
}
|
||||
if (item.isGrantToAdmin() && adminRole != null) {
|
||||
createRolePermissionIfAbsent(adminRole.getId(), permission.getId());
|
||||
}
|
||||
if (item instanceof GaoPermissionCode gaoPermission && gaoPermission.isGrantToStoreManager() && gaoStoreManagerRole != null) {
|
||||
createRolePermissionIfAbsent(gaoStoreManagerRole.getId(), permission.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 角色权限关系不存在时才创建
|
||||
///
|
||||
/// @param roleId 角色 ID
|
||||
/// @param permissionId 权限 ID
|
||||
private void createRolePermissionIfAbsent(String roleId, String permissionId) {
|
||||
RolePermission example = new RolePermission();
|
||||
example.setRoleId(roleId);
|
||||
example.setPermissionId(permissionId);
|
||||
if (rolePermissionMapper.selectByExample(example) != null) {
|
||||
return;
|
||||
}
|
||||
RolePermission rolePermission = new RolePermission();
|
||||
rolePermission.setRoleId(roleId);
|
||||
rolePermission.setPermissionId(permissionId);
|
||||
rolePermissionMapper.insert(rolePermission);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user