【问题标题】:ASP.NET Core MVC, Identity, Custom policy - Problem with custom authorization, policyASP.NET Core MVC、身份、自定义策略 - 自定义授权、策略问题
【发布时间】:2022-03-28 18:11:41
【问题描述】:

我想添加一个策略,以便每个用户都希望具有“管理员”角色的用户可以使用控制器。下面是我的代码。当我在我的控制器类上键入 [Authorize(Policy="NotAdmin")] 时,实际上每个人(无论是否是管理员)都有权拒绝来自控制器的操作。我使用 Visual Studio 2022 和 .NET 6.0。在我的项目中,我使用 Identity,我有扩展 IdentityUser 类的 ApplicationUser 类。

 public class NotAdminRequirement : IAuthorizationRequirement
    {
     
     
    }

public class NotAdminHandler : AuthorizationHandler<NotAdminRequirement>
    {
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, NotAdminRequirement requirement)
        {
            var user = context.User;

            if (!user.IsInRole("Admin"))
            {
                context.Succeed(requirement);
            } 

            return Task.CompletedTask;
        }
    }

在 Program.cs 中:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("NotAdmin", policy => policy.Requirements.Add(new NotAdminRequirement()));
});

【问题讨论】:

  • 您目前是否被拒绝以具有任何权限的用户身份访问 API?

标签: c# asp.net-core asp.net-identity asp.net-core-identity asp.net-authorization


【解决方案1】:

您需要将此添加到 Program.cs:

builder.Services.AddSingleton<IAuthorizationHandler, NotAdminHandler>();

【讨论】:

  • 在提到它作为答案之前,应该在问题评论部分提出。