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