完善权限导入和导出

This commit is contained in:
2024-09-01 17:33:35 +08:00
parent 6ef07c7398
commit dedb421d7b

View File

@@ -18,12 +18,17 @@ import cn.lihongjie.coal.resource.mapper.ResourceMapper;
import cn.lihongjie.coal.resource.service.ResourceService;
import cn.lihongjie.coal.user.service.UserService;
import com.google.common.primitives.Ints;
import io.vavr.control.Try;
import jakarta.annotation.PostConstruct;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -111,6 +116,7 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
return getById(entity.getId());
}
@PersistenceContext EntityManager em;
public PermissionExportDto exportAll() {
@@ -132,75 +138,96 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
public void importAll(PermissionExportDto dto) {
// List<ResourceEntity> resources =
// dto.getResources().stream()
// .map(rd -> resourceMapper.toEntity(rd))
// .collect(Collectors.toList());
//
// List<PermissionEntity> permissions =
// dto.getPermissions().stream().map(mapper::toEntity).toList();
//
// this.resourceService.deleteAll();
// this.repository.deleteAll();
//
// for (ResourceEntity resource : resources) {
//
// jdbcTemplate.update(
// """
// INSERT INTO t_resource
// (id,
// create_time,
// create_user_id,
// update_time,
// update_user_id,
// code,
// name,
// remarks,
// sort_key,
// status,
// anonymous,
// icon,
// metadata,
// org_admin,
// sys_admin,
// type,
// url,
// visible,
// parent_id,
// file_ids,
// rate_limit,
// sign_check,
// submit_token)
// VALUES (
//
// :id,
// :create_time,
// :create_user_id,
// :update_time,
// :update_user_id,
// :code,
// :name,
// :remarks,
// :sort_key,
// :status,
// :anonymous,
// :icon,
// :metadata,
// :org_admin,
// :sys_admin,
// :type,
// :url,
// :visible,
// :parent_id,
// :file_ids,
// :rate_limit,
// :sign_check,
// :submit_token)
//
// """);
// }
//
// this.resourceService.clearCache();
jdbcTemplate.update("delete from t_resource");
jdbcTemplate.update("delete from t_permission_resources");
jdbcTemplate.update("delete from t_permission");
for (var resource : dto.getResources()) {
jdbcTemplate.update(
"""
INSERT INTO t_resource
(id,create_time,create_user_id,update_time,update_user_id,code,name,remarks,sort_key,status,anonymous,icon,metadata,org_admin,sys_admin,type,url,visible,parent_id,file_ids,rate_limit,sign_check,submit_token)
VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
""",
resource.getId(),
resource.getCreateTime(),
resource.getCreateUserId(),
resource.getUpdateTime(),
resource.getUpdateUserId(),
resource.getCode(),
resource.getName(),
resource.getRemarks(),
resource.getSortKey(),
Ints.tryParse(resource.getStatus()),
resource.getAnonymous(),
resource.getIcon(),
resource.getMetadata(),
resource.getOrgAdmin(),
resource.getSysAdmin(),
resource.getType(),
resource.getUrl(),
resource.getVisible(),
resource.getParent(),
null,
resource.getRateLimit(),
resource.getSignCheck(),
resource.getSubmitToken());
}
Set<String> resourceIds =
dto.getResources().stream().map(x -> x.getId()).collect(Collectors.toSet());
for (var permission : dto.getPermissions()) {
jdbcTemplate.update(
"""
INSERT INTO t_permission
(id, create_time, create_user_id, update_time, update_user_id, code, name, remarks, sort_key, status, parent_name, permission_type, file_ids)
VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?)
""",
permission.getId(),
permission.getCreateTime(),
permission.getCreateUserId(),
permission.getUpdateTime(),
permission.getUpdateUserId(),
permission.getCode(),
permission.getName(),
permission.getRemarks(),
permission.getSortKey(),
Ints.tryParse(permission.getStatus()),
permission.getParentName(),
permission.getPermissionType(),
null);
if (CollectionUtils.isNotEmpty(permission.getResources())) {
for (var resourceId : permission.getResources()) {
if (resourceIds.contains(resourceId)) {
jdbcTemplate.update(
"""
INSERT INTO
t_permission_resources (permissions_id, resources_id)
VALUES
(?, ?);
""",
permission.getId(),
resourceId);
} else {
log.warn("permission {} resource not found: {}", permission.getId(), resourceId);
}
}
}
}
this.resourceService.clearCache();
}
public void initDefault() {
@@ -256,9 +283,10 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
}
public void clearCache() {
cacheManager.getCache(Constants.CACHE_PERMISSION).clear();
cacheManager.getCache(Constants.CACHE_IS_ANONYMOUS_BY_RESOURCE_ID).clear();
cacheManager.getCache(Constants.CACHE_ORG_ADMIN_HAS_PERMISSION).clear();
Try.run(() -> cacheManager.getCache(Constants.CACHE_PERMISSION).clear());
Try.run(() -> cacheManager.getCache(Constants.CACHE_IS_ANONYMOUS_BY_RESOURCE_ID).clear());
Try.run(() -> cacheManager.getCache(Constants.CACHE_ORG_ADMIN_HAS_PERMISSION).clear());
Try.run(() -> cacheManager.getCache(Constants.CACHE_ORGANIZATION_PERMISSION_IDS).clear());
userService.clearUserPermissionCache();
}