首页 > 解决方案 > asp.net core RazorPages中如何实现Handler级授权

问题描述

PageModel 的 Authorize 属性是不够的,因为它适用于该 pagemodel 中的所有处理程序。我正在寻找一些自定义授权,可以说“只有 18 岁以上才能访问”,那么如何在 RazorPages(不是 MVC)中实现相同的授权?有什么简洁明了的解决方案吗?

标签: asp.net-coreauthorizationrazor-pages

解决方案


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

作为一种解决方法,您可以手动注入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 岁,如此处所示


推荐阅读