You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合SharpGrip.FluentValidation.AutoValidation实现基于角色的验证

基于角色的FluentValidation Ruleset在SharpGrip自动验证中的实现

这个方案完全可行,不少开发者在多角色API场景下这么用,能很好地隔离不同角色的验证规则,同时复用通用逻辑。下面是具体实现步骤:

1. 定义带规则集的验证器

先在你的验证器中,给不同角色的规则标记对应的规则集,通用规则保留在Default规则集(无需显式标记,默认归属该规则集)。示例代码:

public class CreateOrderRequestValidator : AbstractValidator<CreateOrderRequest>
{
    public CreateOrderRequestValidator()
    {
        // 通用规则(Default规则集)
        RuleFor(x => x.ProductId).NotEmpty();
        RuleFor(x => x.Quantity).GreaterThan(0);

        // Admin角色专属规则
        RuleSet("Admin", () =>
        {
            RuleFor(x => x.DiscountPercentage).InclusiveBetween(0, 50);
        });

        // Customer角色专属规则
        RuleSet("Customer", () =>
        {
            RuleFor(x => x.ShippingAddress).NotEmpty();
        });
    }
}

2. 自定义规则集解析器

要让SharpGrip根据当前用户角色自动选择规则集,需要实现IFluentValidationAutoValidationRuleSetResolver接口,在其中通过HttpContext.User判断角色并返回对应的规则集列表:

public class RoleBasedRuleSetResolver : IFluentValidationAutoValidationRuleSetResolver
{
    public string[] Resolve(HttpContext httpContext, ValidationContext validationContext)
    {
        var ruleSets = new List<string> { "Default" }; // 始终执行通用规则

        // 根据用户角色添加对应规则集
        if (httpContext.User.IsInRole("Admin"))
        {
            ruleSets.Add("Admin");
        }
        else if (httpContext.User.IsInRole("Customer"))
        {
            ruleSets.Add("Customer");
        }

        // 支持多角色场景:如果用户同时拥有多个角色,可添加对应所有规则集
        // if (httpContext.User.IsInRole("Editor")) ruleSets.Add("Editor");

        return ruleSets.ToArray();
    }
}

3. 注册自定义解析器

在API启动配置中,把自定义的解析器注册到DI容器,替换SharpGrip的默认实现:

builder.Services.AddFluentValidationAutoValidation();
// 注册自定义规则集解析器
builder.Services.AddSingleton<IFluentValidationAutoValidationRuleSetResolver, RoleBasedRuleSetResolver>();

注意事项

  • 确保HttpContext.User已完成认证,角色信息正确加载(比如通过JWT、Cookie等认证方式)。
  • 规则集名称要严格匹配,避免大小写或拼写错误导致规则不执行。
  • 若存在用户拥有多个角色的场景,可调整解析器逻辑,返回所有对应角色的规则集,FluentValidation会依次执行这些规则集内的验证规则。

内容的提问来源于stack exchange,提问作者tembojoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:03:16