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

如何优化C#授权策略注册中的重复匿名委托代码?

优化授权策略重复代码方案

问题分析

你的代码存在大量重复逻辑:每个策略都重复执行Claims查找、JSON反序列化、权限判断的步骤,且原代码中WtmPolicy被错误嵌套在CmPolicy的配置委托内,会导致策略注册异常。

优化方案

通过提取通用验证逻辑+批量注册策略的方式消除重复:

  1. 提取通用权限检查方法
    把重复的Claims解析、权限验证逻辑封装成单独方法,复用逻辑:
private static bool HasRequiredOption(ClaimsPrincipal user, string requiredOption)
{
    var optionsSerialized = user.FindFirstValue(ClaimType.Options);
    if (string.IsNullOrEmpty(optionsSerialized))
        return false;

    var userOptions = JsonSerializer.Deserialize<string[]>(optionsSerialized);
    return userOptions?.Contains(requiredOption) == true;
}
  1. 批量注册策略
    遍历所有权限值,批量生成并注册对应的授权策略,避免重复的AddPolicy调用:
// 定义所有权限与对应策略名的映射
var permissionPolicies = new Dictionary<string, string>
{
    { "um", "UmPolicy" },
    { "cm", "CmPolicy" },
    { "wtm", "WtmPolicy" }
};

foreach (var (permission, policyName) in permissionPolicies)
{
    policyBuilder.AddPolicy(policyName, policy =>
    {
        policy.RequireAssertion(context => HasRequiredOption(context.User, permission));
    });
}

优化说明

  • 消除重复代码:通用方法集中处理Claims解析、反序列化和权限判断逻辑,后续新增权限只需在映射字典中添加条目即可。
  • 修复原代码错误:解决了WtmPolicy嵌套注册的问题,确保所有策略都能正确注册。
  • 提升可维护性:权限与策略名的映射清晰,后续修改权限或策略名只需调整字典,无需修改大量重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:54:17