asp.net 核心的自定义基于策略的授权,视图问题

Custom Policy-Based Authorization with asp.net Core, Problems with the View

我根据 https://docs.asp.net/en/latest/security/authorization/policies.html.

实施了 Custom Policy=Based Authorization

当通过控制器中的[Authorize]访问时,这最终成功了。但是,当我尝试在我的视图中使用它时,如下所示。我对 context.Resource 为空有疑问。

我是 mvc 的新手,非常感谢您的帮助。

查看

@if (await AuthorizationService.AuthorizeAsync(User, "IsRegisteredUser"))
{
     <li><a asp-area="" asp-controller="Solution" asp-action="Index">Solutions</a></li>
}

授权处理程序

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsRegisteredUserRequirement requirement)
   {

            if(context.User.Identity.IsAuthenticated)
            {
                var mvcContext = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext;


            }


        return Task.CompletedTask;
    }

在视图中,您可以将 AuthorizeAsync 的重载方法与通过 ViewContext 设置的资源参数一起使用:

await AuthorizationService.AuthorizeAsync(User, ViewContext, "YourPolicyName");

然后在处理程序中,您可以将资源转换为 ActionContext 基础 class,ViewContext 和 AuthorizationFilterContext 继承自该基础:

var actionContext = context.Resource as Microsoft.AspNetCore.Mvc.ActionContext;

然后您可以访问 HttpContext、ModelState 和 RouteData。