diff --git a/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java b/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java index 2a98b59a..bffdee7a 100644 --- a/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java +++ b/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java @@ -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 resources = -// dto.getResources().stream() -// .map(rd -> resourceMapper.toEntity(rd)) -// .collect(Collectors.toList()); -// -// List 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 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 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(); }