mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 07:46:40 +08:00
bugfix
This commit is contained in:
@@ -14,8 +14,6 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RequestMapping("/permission")
|
||||
@RestController
|
||||
@SysLog(module = "权限管理")
|
||||
@@ -53,12 +51,12 @@ public class PermissionController extends BaseController {
|
||||
}
|
||||
|
||||
@PostMapping("/exportAll")
|
||||
public List<PermissionExportDto> exportAll(@RequestBody CommonQuery dto) {
|
||||
public PermissionExportDto exportAll(@RequestBody CommonQuery dto) {
|
||||
return this.service.exportAll();
|
||||
}
|
||||
|
||||
@PostMapping("/importAll")
|
||||
public Boolean getById(@RequestBody PermissionImportDto dto) {
|
||||
public Boolean getById(@RequestBody PermissionExportDto dto) {
|
||||
this.service.importAll(dto);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package cn.lihongjie.coal.permission.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Data
|
||||
public class PermissionDto2 extends OrgCommonDto {
|
||||
|
||||
private String parentName;
|
||||
private List<String> resources;
|
||||
|
||||
private String permissionType;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,29 +1,23 @@
|
||||
package cn.lihongjie.coal.permission.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.CommonDto;
|
||||
|
||||
import cn.lihongjie.coal.resource.dto.ResourceDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Data
|
||||
public class PermissionExportDto extends CommonDto {
|
||||
|
||||
private String parentName;
|
||||
public class PermissionExportDto {
|
||||
|
||||
|
||||
|
||||
private List<ResourceDto> resources;
|
||||
private String permissionType;
|
||||
|
||||
|
||||
private String permissionTypeName;
|
||||
private List<PermissionDto2> permissions;
|
||||
|
||||
|
||||
|
||||
|
||||
@Data
|
||||
public static class ResourceDto extends CommonDto {
|
||||
|
||||
@Comment("资源类型")
|
||||
private String type;
|
||||
|
||||
@Comment("资源地址")
|
||||
private String url;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,4 +27,8 @@ public interface PermissionMapper
|
||||
PermissionEntity toEntity(PermissionExportDto exportDto);
|
||||
|
||||
PermissionSimpleDto toSimpleDto(PermissionEntity x);
|
||||
|
||||
PermissionDto2 toExportDto2(PermissionEntity permissionEntity);
|
||||
|
||||
PermissionEntity toEntity(PermissionDto2 permissionDto2);
|
||||
}
|
||||
|
||||
@@ -9,19 +9,18 @@ import cn.lihongjie.coal.organization.service.OrganizationService;
|
||||
import cn.lihongjie.coal.permission.dto.CreatePermissionDto;
|
||||
import cn.lihongjie.coal.permission.dto.PermissionDto;
|
||||
import cn.lihongjie.coal.permission.dto.PermissionExportDto;
|
||||
import cn.lihongjie.coal.permission.dto.PermissionImportDto;
|
||||
import cn.lihongjie.coal.permission.dto.UpdatePermissionDto;
|
||||
import cn.lihongjie.coal.permission.entity.PermissionEntity;
|
||||
import cn.lihongjie.coal.permission.mapper.PermissionMapper;
|
||||
import cn.lihongjie.coal.permission.repository.PermissionRepository;
|
||||
import cn.lihongjie.coal.resource.entity.ResourceEntity;
|
||||
import cn.lihongjie.coal.resource.mapper.ResourceMapper;
|
||||
import cn.lihongjie.coal.resource.service.ResourceService;
|
||||
import cn.lihongjie.coal.user.service.UserService;
|
||||
|
||||
import io.vavr.Tuple;
|
||||
import io.vavr.Tuple3;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@@ -35,6 +34,7 @@ import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -55,12 +55,9 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
public void init() {}
|
||||
|
||||
@Autowired ApplicationContext applicationContext;
|
||||
@Autowired
|
||||
CacheManager cacheManager;
|
||||
@Autowired CacheManager cacheManager;
|
||||
|
||||
|
||||
@Autowired
|
||||
PermissionService that;
|
||||
@Autowired PermissionService that;
|
||||
@Autowired UserService userService;
|
||||
|
||||
public PermissionDto getById(String id) {
|
||||
@@ -85,12 +82,8 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
|
||||
@Autowired ResourceService resourceService;
|
||||
|
||||
public List<PermissionExportDto> exportAll() {
|
||||
|
||||
return this.repository.findAll().stream()
|
||||
.map(pe -> mapper.toExportDto(pe))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
@Autowired ResourceMapper resourceMapper;
|
||||
@Autowired JdbcTemplate jdbcTemplate;
|
||||
|
||||
public PermissionDto create(CreatePermissionDto request) {
|
||||
|
||||
@@ -118,73 +111,96 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
|
||||
return getById(entity.getId());
|
||||
}
|
||||
@PersistenceContext EntityManager em;
|
||||
|
||||
public void importAll(PermissionImportDto dto) {
|
||||
public PermissionExportDto exportAll() {
|
||||
|
||||
List<ResourceEntity> all = resourceService.findAll();
|
||||
List<ResourceEntity> allResources = this.resourceService.findAll();
|
||||
|
||||
Map<Tuple3<String, String, String>, List<ResourceEntity>> resourceMap =
|
||||
all.stream()
|
||||
.collect(
|
||||
Collectors.groupingBy(
|
||||
re -> Tuple.of(re.getCode(), re.getName(), re.getType())));
|
||||
List<PermissionEntity> allPermission = this.findAll();
|
||||
|
||||
Map<Tuple3<String, String, String>, List<PermissionEntity>> dbPermissionMap =
|
||||
this.repository.findAll().stream()
|
||||
.collect(
|
||||
Collectors.groupingBy(
|
||||
pe ->
|
||||
Tuple.of(
|
||||
pe.getCode(),
|
||||
pe.getName(),
|
||||
pe.getParentName())));
|
||||
PermissionExportDto dto = new PermissionExportDto();
|
||||
|
||||
for (PermissionExportDto exportDto : dto.getData()) {
|
||||
dto.setResources(
|
||||
allResources.stream().map(resourceMapper::toDto).collect(Collectors.toList()));
|
||||
|
||||
PermissionEntity permission =
|
||||
dbPermissionMap
|
||||
.getOrDefault(
|
||||
Tuple.of(
|
||||
exportDto.getCode(),
|
||||
exportDto.getName(),
|
||||
exportDto.getParentName()),
|
||||
new ArrayList<>())
|
||||
.stream()
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
dto.setPermissions(
|
||||
allPermission.stream().map(mapper::toExportDto2).collect(Collectors.toList()));
|
||||
|
||||
if (permission == null) {
|
||||
return dto;
|
||||
}
|
||||
|
||||
permission = this.mapper.toEntity(exportDto);
|
||||
public void importAll(PermissionExportDto dto) {
|
||||
|
||||
} else {
|
||||
if (permission.getResources() != null) {
|
||||
|
||||
permission.getResources().clear();
|
||||
}
|
||||
permission.setResources(this.mapper.toEntity(exportDto).getResources());
|
||||
}
|
||||
|
||||
if (permission.getResources() != null) {
|
||||
|
||||
for (ResourceEntity resource : permission.getResources()) {
|
||||
|
||||
resource.setId(
|
||||
resourceMap
|
||||
.get(
|
||||
Tuple.of(
|
||||
resource.getCode(),
|
||||
resource.getName(),
|
||||
resource.getType()))
|
||||
.get(0)
|
||||
.getId());
|
||||
}
|
||||
}
|
||||
|
||||
this.repository.save(permission);
|
||||
}
|
||||
|
||||
this.clearCache();
|
||||
// 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();
|
||||
}
|
||||
|
||||
public void initDefault() {
|
||||
@@ -220,6 +236,7 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
|
||||
return all.stream().map(this.mapper::toDto).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Autowired OrganizationService organizationService;
|
||||
|
||||
public void delete(IdRequest request) {
|
||||
@@ -233,12 +250,9 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
}
|
||||
|
||||
@Cacheable(cacheNames = Constants.CACHE_IS_ANONYMOUS_BY_RESOURCE_ID, key = "#resourceId")
|
||||
|
||||
public boolean isAnonymousByResourceId(String resourceId) {
|
||||
|
||||
|
||||
return this.repository.isAnonymousByResourceId(resourceId);
|
||||
|
||||
}
|
||||
|
||||
public void clearCache() {
|
||||
@@ -247,24 +261,21 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
|
||||
cacheManager.getCache(Constants.CACHE_ORG_ADMIN_HAS_PERMISSION).clear();
|
||||
|
||||
userService.clearUserPermissionCache();
|
||||
|
||||
}
|
||||
|
||||
@Cacheable(cacheNames = Constants.CACHE_ORG_ADMIN_HAS_PERMISSION, key = "#resourceId")
|
||||
public boolean orgAdminHasPermission(String resourceId, String organizationId) {
|
||||
|
||||
|
||||
|
||||
var defaultPermissionIds =
|
||||
new HashSet<>(organizationService.getDefaultPermissionIds(organizationId));
|
||||
|
||||
return that.getAllFromCache().stream()
|
||||
.filter(x -> defaultPermissionIds.contains(x.getId()) || StringUtils.equalsAny(x.getPermissionType(), "0", "1"))
|
||||
.filter(
|
||||
x ->
|
||||
defaultPermissionIds.contains(x.getId())
|
||||
|| StringUtils.equalsAny(x.getPermissionType(), "0", "1"))
|
||||
.flatMap(x -> x.getResources().stream())
|
||||
.anyMatch(x -> StringUtils.equals(x.getId(), resourceId));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Cacheable(cacheNames = Constants.CACHE_ORG_ADMIN_HAS_PERMISSION, key = "#resourceId")
|
||||
|
||||
@@ -46,4 +46,5 @@ public interface ResourceMapper
|
||||
}
|
||||
}
|
||||
|
||||
ResourceEntity toEntity(ResourceDto rd);
|
||||
}
|
||||
|
||||
@@ -288,7 +288,10 @@ public class ResourceService extends BaseService<ResourceEntity, ResourceReposit
|
||||
}
|
||||
|
||||
|
||||
public void deleteAll() {
|
||||
|
||||
this.repository.deleteAll();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
3404
src/main/resources/db/migration/V55__resourceAll.sql
Normal file
3404
src/main/resources/db/migration/V55__resourceAll.sql
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user