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。
我根据 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。