如何在asp.net核心RazorPages中实现处理程序级授权


PageModel的Authorize属性不够,因为它适用于该页面模型中的所有处理程序。我正在寻找一些自定义授权,比如"只有年龄在18岁以上才能访问",那么如何在RazorPages(而不是MVC(中实现相同的授权呢?对此有什么简洁明了的解决方案吗??

当前无法在单个Razor页面处理程序上使用Authorize属性,您可以在此处跟踪功能请求。

作为一种变通方法,您可以注入IAuthorizationService并手动实现授权:

private readonly IAuthorizationService _authorizationService;
public IndexModel(ILogger<PrivacyModel> logger,  IAuthorizationService authorizationService)
{
_logger = logger;
_authorizationService = authorizationService;
}
public async Task OnGet()
{
var isAuthorized = await _authorizationService.AuthorizeAsync(
User, "PolicyName");
if (!isAuthorized.Succeeded)
{
//not pass the authorzation 
}
}

并创建策略来检查价值用户的年龄声明是否超过18岁,如图所示。

最新更新