So, after further reading of SharpGrip.FluentValidation.AutoValidation, I came across the IGlobalValidationInterceptor.
As per the docs
validation interceptors is considered to be an advanced feature and is not needed for most use cases
However, for my use case, it appears perfect:
public class ValidationInterceptor : IGlobalValidationInterceptor
{
public IValidationContext? BeforeValidation(ActionExecutingContext actionExecutingContext, IValidationContext validationContext)
{
if (actionExecutingContext.HttpContext.User.IsInRole(Roles.Users))
{
return ValidationContext<object>.CreateWithOptions(validationContext.InstanceToValidate, options =>
{
options.IncludeRuleSets(Roles.Users).IncludeRulesNotInRuleSet();
});
}
if (actionExecutingContext.HttpContext.User.IsInRole(Roles.Employees))
{
return ValidationContext<object>.CreateWithOptions(validationContext.InstanceToValidate, options =>
{
options.IncludeRuleSets(Roles.Employees).IncludeRulesNotInRuleSet();
});
}
return validationContext;
}
public ValidationResult? AfterValidation(ActionExecutingContext actionExecutingContext,
IValidationContext validationContext)
{
return null;
}
}
Thanks to the contributors at SharpGrip