SUPPORT-9269: Fix

This commit is contained in:
Eduard Tihomirov 2025-07-21 13:13:58 +03:00
parent 80dcc2b7f9
commit 61aa2cc0f4
3 changed files with 36 additions and 16 deletions

View file

@ -16,6 +16,7 @@ import ru.micord.ervu.account_applications.component.model.Account;
import ru.micord.ervu.account_applications.component.model.Person;
import ru.micord.ervu.account_applications.component.model.dto.SearchRequest;
import ru.micord.ervu.account_applications.component.model.dto.SearchResponse;
import ru.micord.ervu.account_applications.dao.RecruitmentDao;
import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.security.model.jwt.UserSession;
import ru.micord.ervu.account_applications.security.model.role.ErvuRoleAuthority;
@ -30,15 +31,20 @@ import ru.cg.webbpm.modules.webkit.beans.Behavior;
*/
@Service
public class AccountGridLoadService extends Behavior implements GridService {
private static final String DOMAIN_IDS = "domainIds";
private static final String DOMAIN_ID = "domainId";
private final SecurityContext securityContext;
private final AccountFetchService accountService;
@Value("${ervu.role.admin:#{null}}")
private String ervuAdminRole;
private final RecruitmentDao recruitmentDao;
@Value("${ervu.security.role:#{null}}")
private String ervuSecurityRole;
public AccountGridLoadService(SecurityContext securityContext,
AccountFetchService accountService) {
AccountFetchService accountService,
RecruitmentDao recruitmentDao) {
this.securityContext = securityContext;
this.accountService = accountService;
this.recruitmentDao = recruitmentDao;
}
@Override
@ -105,16 +111,30 @@ public class AccountGridLoadService extends Behavior implements GridService {
Map<String, Object> filterMap = new HashMap<>();
UserSession userSession = securityContext.getUserSession();
Set<ErvuRoleAuthority> roles = userSession.roles();
if (ervuAdminRole == null
|| roles.stream().noneMatch(role -> role.getAuthority().equals(ervuAdminRole))) {
filterMap.put("domainId", securityContext.getDomainId());
if (ervuSecurityRole == null
|| roles.stream().noneMatch(role -> role.getAuthority().equals(ervuSecurityRole))) {
List<String> domainIds = recruitmentDao.getRecruitmentIdsWithParentByDomainId(securityContext.getDomainId());
filterMap.put(DOMAIN_IDS, domainIds.toArray());
}
if (filters != null && filters.length > 0) {
filterMap.putAll(Arrays.stream(filters)
.filter(filter -> filter.getFilterModels() != null && filter.getFilterModels().length > 0)
.collect(Collectors.toMap(
filter -> getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name,
filter -> filter.getFilterModels()[0].value,
filter -> {
String filterName = getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name;
if (DOMAIN_ID.equals(filterName)) {
return DOMAIN_IDS;
}
return filterName;
},
filter -> {
String filterName = getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name;
Object filterValue = filter.getFilterModels()[0].value;
if (DOMAIN_ID.equals(filterName)) {
return recruitmentDao.getRecruitmentIdsWithParentByDomainId(filterValue.toString()).toArray();
}
return filterValue;
},
(existing, replacement) -> replacement
))
);

View file

@ -39,8 +39,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
@LocalGraphSource(sourceFieldName = "loadDao")
@NotNull
public EntityColumn recruitmentColumn;
@Value("${ervu.role.admin:security_administrator}")
private String ervuAdminRole;
@Value("${ervu.security.role:security_administrator}")
private String ervuSecurityRole;
public RecruitmentGridService(RecruitmentDao recruitmentDao, SecurityContext securityContext) {
this.recruitmentDao = recruitmentDao;
@ -54,8 +54,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
List<String> recruitmentIds;
List<Filter> updatedFilters = new ArrayList<>(Arrays.asList(filters));
Optional<Filter> recruitmentFilterOpt = findRecruitmentFilter(updatedFilters);
if (ervuAdminRole != null && roles.stream().anyMatch(role -> role.getAuthority().equals(
ervuAdminRole))) {
if (ervuSecurityRole != null && roles.stream().anyMatch(role -> role.getAuthority().equals(
ervuSecurityRole))) {
recruitmentIds = recruitmentFilterOpt.map(
filter -> getChildRecruitmentIds(updatedFilters, filter))
.orElseGet(this::getAllRecruitmentIds);

View file

@ -47,8 +47,8 @@ public class TreeItemService {
public EntityColumn businessIdColumn;
@GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF)
public EntityColumn domainIdColumn;
@Value("${ervu.role.admin:security_administrator}")
private String ervuAdminRole;
@Value("${ervu.security.role:security_administrator}")
private String ervuSecurityRole;
public TreeItemService(SecurityContext securityContext) {
this.securityContext = securityContext;
@ -59,8 +59,8 @@ public class TreeItemService {
UserSession userSession = securityContext.getUserSession();
Set<ErvuRoleAuthority> roles = userSession.roles();
List<TreeItemDto> filteredTreeItems = loadTreeItems();
if (ervuAdminRole == null || roles.stream().noneMatch(role -> role.getAuthority().equals(
ervuAdminRole))) {
if (ervuSecurityRole == null || roles.stream().noneMatch(role -> role.getAuthority().equals(
ervuSecurityRole))) {
filteredTreeItems = filteredTreeItems.stream()
.filter(item -> item.domainId.equalsIgnoreCase(domainId))
.toList();