将 .NET 6 CORE 授权策略移出 program.cs 以实现干净的 program.cs 的最佳方法是什么

What is the best way to move .NET 6 CORE Authorization Policies out of program.cs for a clean program.cs

我的 .NET 6 CORE 项目中有很多授权策略。现在我的 program.cs 文件(.NET 6 - 没有 startup.cs)充斥着许多策略,有没有办法清理 program.cs 文件并将所有策略代码移动到.NET CORE 6 中的不同 class 或文件?

如果需要任何其他详细信息,请告诉我。

Program.cs

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("SuperAdminPolicy", policy => policy.RequireRole("Super Administrator"));

    options.AddPolicy("DashboardPolicy", policy => policy.RequireAssertion(context =>
            context.User.IsInRole("Super Administrator") ||
            context.User.HasClaim(claim => claim.Type=="Dashboard" && claim.Value=="true")));

    options.AddPolicy("CreateRolePolicy", policy => policy.RequireAssertion(context =>
        context.User.IsInRole("Super Administrator") ||
        context.User.HasClaim(claim => claim.Type == "Create Role" && claim.Value == "true"));
        
    // ... And so many more policies as this
    
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

我确实找到了很多关于如何在早期版本的 .NET Core 中执行此操作的文章。我不确定如何在 .NET 6 Core 中解决这个问题。根据下面的评论,扩展方法看起来很有希望。但是 .NET 6 有一个非常简单的 program.cs 文件,在实现上存在关键差异。

我按照上述视频中描述的步骤使用自定义策略和处理程序解决了我的问题:

https://www.youtube.com/watch?v=cXsYer31UPo&list=PL6n9fhu94yhVkdrusLaQsfERmL_Jh4XmU&index=101

  1. 创建自定义授权策略
  2. 根据策略要求创建处理程序。
  3. 在program.cs
  4. 中注册服务