This commit is contained in:
2024-09-01 00:02:02 +08:00
parent 2f8b29e730
commit 0b292e060f
8 changed files with 3539 additions and 105 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -27,4 +27,8 @@ public interface PermissionMapper
PermissionEntity toEntity(PermissionExportDto exportDto);
PermissionSimpleDto toSimpleDto(PermissionEntity x);
PermissionDto2 toExportDto2(PermissionEntity permissionEntity);
PermissionEntity toEntity(PermissionDto2 permissionDto2);
}

View File

@@ -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")

View File

@@ -46,4 +46,5 @@ public interface ResourceMapper
}
}
ResourceEntity toEntity(ResourceDto rd);
}

View File

@@ -288,7 +288,10 @@ public class ResourceService extends BaseService<ResourceEntity, ResourceReposit
}
public void deleteAll() {
this.repository.deleteAll();
}
}

File diff suppressed because it is too large Load Diff