PageModel的Authorize属性是不够的,因为它适用于该PageModel中的所有处理程序。我正在寻找一些自定义授权,说“只有18岁以上才能访问”,那么如何在RazorPages(不是MVC)中实现相同的权限?是否有任何简洁明了的解决方案?
当前无法在单个Razor页面处理程序上使用Authorize
属性,您可以在here中跟踪功能请求。
作为解决方法,您可以注入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,如here所示。