79244884

Date: 2024-12-02 16:48:57
Score: 0.5
Natty:
Report link

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

Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: tembojoe