UserRoleVerification for company-service

This commit is contained in:
akulikov 2023-04-07 13:50:06 +03:00
parent 2269f2c10e
commit cb3b251ee5
9 changed files with 83 additions and 32 deletions

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.validation.IValidator;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
@ -18,6 +19,7 @@ public class ValidationHelper {
private IMessageResolver messageResolver;
public ValidationHelper(IMessageResolver messageResolver) {
Objects.requireNonNull(messageResolver);
this.messageResolver = messageResolver;
}

View file

@ -7,6 +7,7 @@ import org.springframework.context.annotation.Scope;
import ru.spcex.clearing.company.error.CompanyErrors;
import ru.spcex.clearing.company.util.RequestHelper;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.enumeration.SimpleMessageResolver;
@ -27,6 +28,6 @@ public class BeanConfiguration {
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) {
return new UserRoleVerification(imdgProvider, messageResolver, CompanyErrors.UserVerifyDenial);
return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, CompanyErrors.UserVerifyDenial);
}
}

View file

@ -17,6 +17,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCat
import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -33,12 +34,14 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
private final Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator;
private final ValidationHelper validationHelper;
private final UserRoleVerification userRoleVerification;
@Autowired
public ClearingMemberCategoryService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("clearingMemberCategoryNewRequestValidator") Function<ClearingMemberCategoryNewRequest, IValidator> clearingMemberCategoryNewRequestValidator,
@Qualifier("clearingMemberCategoryUpdateRequestValidator") Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator,
@Qualifier("clearingMemberCategoryDeleteRequestValidator") Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator) {
@ -48,6 +51,7 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
this.clearingMemberCategoryUpdateRequestValidator = clearingMemberCategoryUpdateRequestValidator;
this.clearingMemberCategoryDeleteRequestValidator = clearingMemberCategoryDeleteRequestValidator;
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
}
@Override
@ -67,7 +71,10 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
private RequestInfoUpdate clearingMemberCategoryNew(BaseRequest<ClearingMemberCategoryNewRequest> userRequest) {
log.debug("ClearingMemberCategoryNewRequest received {}", userRequest.getId());
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload();
@ -84,7 +91,10 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
public RequestInfoUpdate clearingMemberCategoryUpdate(BaseRequest<ClearingMemberCategoryUpdateRequest> userRequest) {
ClearingMemberCategoryUpdateRequest req = userRequest.getRequestPayload();
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryUpdateRequestValidator);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryUpdateRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
log.debug("ClearingMemberCategoryUpdateRequest received");
@ -100,7 +110,10 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
private RequestInfoUpdate clearingMemberCategoryDelete(BaseRequest<CommonDeleteRequest> userRequest) {
CommonDeleteRequest req = userRequest.getRequestPayload();
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryDeleteRequestValidator);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryDeleteRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
log.debug("CommonDeleteRequest received id = {}", req.getId());

View file

@ -20,7 +20,6 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.validation.IValidator;
@ -49,7 +48,7 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
this.companyService = companyService;
this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification.setRoleForVerification(UserRole.Admin);
this.userRoleVerification = userRoleVerification;
this.companyInfoUpdateRequestValidator = companyInfoUpdateRequestValidator;
this.requestHelper = requestHelper.setLogger(log);
}

View file

@ -19,7 +19,6 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -57,7 +56,7 @@ public class CompanyRoleSetService extends QueueConsumer implements Initializing
this.imdgProvider = imdgProvider;
this.companyRoleSetMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
this.idSequence = imdgProvider.getImdgIdGenerator();
this.userRoleVerification = userRoleVerification.setRoleForVerification(UserRole.Admin);
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
// this.companyDeleteRequestValidator = companyDeleteRequestValidator;
this.requestHelper = requestHelper.setLogger(log);
@ -82,7 +81,8 @@ public class CompanyRoleSetService extends QueueConsumer implements Initializing
CompanyRoleSetNewRequest req = companyRoleNewRequestBaseRequest.getRequestPayload();
log.debug("companyroleset-new request received, BaseRequest.id = {}", companyRoleNewRequestBaseRequest.getId());
{ // Валидация, ValidationException
userRoleVerification.validateRoleAndThrow(companyRoleNewRequestBaseRequest);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyRoleNewRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
// RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(companyRoleNewRequestBaseRequest, companyNewRequestValidator);
// if (requestInfoUpdate != null) return requestInfoUpdate;
}
@ -118,7 +118,8 @@ public class CompanyRoleSetService extends QueueConsumer implements Initializing
CommonDeleteRequest request = companyRoleSetDeleteRequest.getRequestPayload();
log.debug("companyRoleSetDeleteRequest received id = {}", request.getId());
{ // Валидация, ValidationException
userRoleVerification.validateRoleAndThrow(companyRoleSetDeleteRequest);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyRoleSetDeleteRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
if (request.getId() == null) {
return requestHelper.makeErrorResponse(companyRoleSetDeleteRequest, CompanyErrors.RequiredFieldEmpty, "id");
}

View file

@ -22,7 +22,6 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
@ -80,7 +79,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
this.companySymbolsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
this.idSequence = imdgProvider.getImdgIdGenerator();
this.userRoleVerification = userRoleVerification.setRoleForVerification(UserRole.Admin);
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.companyNewRequestValidator = companyNewRequestValidator;
this.companyUpdateRequestValidator = companyUpdateRequestValidator;
@ -107,9 +106,11 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
private synchronized RequestInfoUpdate createCompany(BaseRequest<CompanyNewRequest> companyNewRequestBaseRequest) throws ValidationException {
CompanyNewRequest req = companyNewRequestBaseRequest.getRequestPayload();
log.debug("company-new request received, BaseRequest.id = {}", companyNewRequestBaseRequest.getId());
{ // Валидация, ValidationException
userRoleVerification.validateRoleAndThrow(companyNewRequestBaseRequest);
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(companyNewRequestBaseRequest, companyNewRequestValidator);
{ // Валидация
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyNewRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(companyNewRequestBaseRequest, companyNewRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
}
Company company = new Company();
@ -153,9 +154,11 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
private synchronized RequestInfoUpdate updateCompany(BaseRequest<CompanyNewRequest> companyUpdateRequestBaseRequest) throws ValidationException {
CompanyNewRequest updateRequest = companyUpdateRequestBaseRequest.getRequestPayload();
{ // Валидация, ValidationException
userRoleVerification.validateRoleAndThrow(companyUpdateRequestBaseRequest);
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(companyUpdateRequestBaseRequest, companyUpdateRequestValidator);
{ // Валидация,
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyUpdateRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(companyUpdateRequestBaseRequest, companyUpdateRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
}
ImdgTransaction transaction = imdgProvider.newTransaction();
@ -234,9 +237,11 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
private synchronized RequestInfoUpdate deleteCompany(BaseRequest<CommonDeleteRequest> companyBlockRequestBaseRequest) throws ValidationException {
CommonDeleteRequest request = companyBlockRequestBaseRequest.getRequestPayload();
log.debug("CommonDeleteRequest (block request) received id = {}", request.getId());
{ // Валидация, ValidationException
userRoleVerification.validateRoleAndThrow(companyBlockRequestBaseRequest);
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(companyBlockRequestBaseRequest, companyDeleteRequestValidator);
{ // Валидация
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyBlockRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(companyBlockRequestBaseRequest, companyDeleteRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
}
ImdgTransaction transaction = imdgProvider.newTransaction();

View file

@ -16,6 +16,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest
import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -30,17 +31,20 @@ public class ContactService extends QueueConsumer implements InitializingBean {
private final ValidationHelper validationHelper;
private final Function<ContactNewRequest, IValidator> contactNewRequestValidator;
private final Function<ContactUpdateRequest, IValidator> contactUpdateRequestValidator;
private final UserRoleVerification userRoleVerification;
@Autowired
public ContactService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("contactNewRequestValidator") Function<ContactNewRequest, IValidator> contactNewRequestValidator,
@Qualifier("contactUpdateRequestValidator") Function<ContactUpdateRequest, IValidator> contactUpdateRequestValidator) {
super(kafkaQueue, kafkaProducer);
this.contactMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class);
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
this.contactNewRequestValidator = contactNewRequestValidator;
this.contactUpdateRequestValidator = contactUpdateRequestValidator;
}
@ -59,9 +63,10 @@ public class ContactService extends QueueConsumer implements InitializingBean {
public RequestInfoUpdate contactNew(BaseRequest<ContactNewRequest> userRequest) {
log.debug("ContactNewRequest received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(
userRequest, contactNewRequestValidator
);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactNewRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
ContactNewRequest contactNewRequest = userRequest.getRequestPayload();
@ -78,9 +83,10 @@ public class ContactService extends QueueConsumer implements InitializingBean {
public RequestInfoUpdate contactUpdate(BaseRequest<ContactUpdateRequest> userRequest) {
log.debug("ContactUpdateRequest received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(
userRequest, contactUpdateRequestValidator
);
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactUpdateRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
// Тип контакта не меняем, при валидации кидаем ошибку.

View file

@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUp
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -37,12 +38,14 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
private final Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator;
private final Function<ProfileDocumentUpdateRequest, IValidator> profileDocumentUpdateRequestValidator;
private final ValidationHelper validationHelper;
private final UserRoleVerification userRoleVerification;
@Autowired
public ProfileDocumentService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
KafkaSender kafkaReqProducer,
ImdgProvider imdgProvider,
UserRoleVerification userRoleVerification,
@Qualifier("profileDocumentNewRequestValidation") Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator,
@Qualifier("profileDocumentUpdateRequestValidation") Function<ProfileDocumentUpdateRequest, IValidator> profileDocumentUpdateRequestValidator,
ValidationHelper validationHelper) {
@ -52,6 +55,7 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
this.profileDocumentNewRequestValidator = profileDocumentNewRequestValidator;
this.profileDocumentUpdateRequestValidator = profileDocumentUpdateRequestValidator;
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
}
@Override
@ -72,9 +76,11 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
private RequestInfoUpdate profileDocumentNew(BaseRequest<ProfileDocumentNewRequest> profileDocumentNewRequestBaseRequest) {
log.trace("Start processing ProfileDocumentNewRequest!");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(
profileDocumentNewRequestBaseRequest,
profileDocumentNewRequestValidator
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentNewRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(
profileDocumentNewRequestBaseRequest, profileDocumentNewRequestValidator
);
if (requestInfoUpdate != null) return requestInfoUpdate;
@ -106,7 +112,10 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
private RequestInfoUpdate profileDocumentUpdate(BaseRequest<ProfileDocumentUpdateRequest> profileDocumentUpdateRequestBaseRequest) {
log.trace("Start processing ProfileDocumentUpdateRequest!");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentUpdateRequestBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(
profileDocumentUpdateRequestBaseRequest,
profileDocumentUpdateRequestValidator
);

View file

@ -24,7 +24,8 @@ import java.util.Objects;
* <p/>
* Основная проверка прав осуществляется на frontend-api, и использовать этот компонент дополнительно не требуется.
* <p/>
* Использовать @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE), требует задание роли через setRoleForVerification(role)
* Использовать @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE), требует задание роли через setRoleForVerification(role).
* Либо роль можно задать во втором конструкторе, переопределив её где требуется (если используется scope prototype)
*/
public class UserRoleVerification {
protected Logger log = LoggerFactory.getLogger(getClass());
@ -45,6 +46,20 @@ public class UserRoleVerification {
this.roleVerificationError = roleVerificationError;
}
public UserRoleVerification(ImdgProvider imdg,
IMessageResolver messageResolver,
UserRole roleForVerification,
IErrorEnumId roleVerificationError) {
Objects.requireNonNull(roleForVerification);
Objects.requireNonNull(roleVerificationError);
Objects.requireNonNull(messageResolver);
Objects.requireNonNull(roleForVerification);
userRoleSessions = imdg.getImdg(IMDGDistributedNames.Map_UserRoleSession, UserRoleSession.class);
this.messageResolver = messageResolver;
this.roleVerificationError = roleVerificationError;
this.roleForVerification = roleForVerification;
}
protected boolean userHasRole(Long userId, IEnumKey role) {
return userHasRole(userId, role == null ? null : role.getKey());
}