You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建代表已登录用户的Asp.Net Identity权限策略?

解决方案

你不需要手动注入AuthenticationStateProvider获取用户信息,Asp.Net Core 授权策略的校验上下文已经自带当前请求的用户主体对象,有两种实现方式可选:

1. 推荐实现(官方内置方法)

直接使用原生提供的RequireAuthenticatedUser()方法即可实现「仅已登录用户可访问」的校验,代码更简洁且性能更优:

if (!opts.UseRolesAndPolicies()) 
{
    // 禁用权限管控:所有请求都通过策略校验
    config.AddPolicy("LoggedInUser", policy => 
        policy.RequireAssertion(context => true));
}
else
{
    // 启用权限管控:仅已登录用户通过校验
    config.AddPolicy("LoggedInUser", policy => 
        policy.RequireAuthenticatedUser());
}

2. 自定义断言实现

如果你确实需要在RequireAssertion中扩展其他校验逻辑,直接通过上下文的User属性判断登录状态即可:

config.AddPolicy("LoggedInUser", policy => 
    policy.RequireAssertion(context => 
        context.User.Identity?.IsAuthenticated == true));

注意事项

  • 你当前代码的逻辑与方法名语义相反:UseRolesAndPolicies()返回true时你注释标注为「角色/策略已禁用」,建议核对实际业务逻辑是否符合预期。
  • 上述实现完全兼容Blazor Server场景,不管是用在AuthorizeView组件还是[Authorize(Policy = "LoggedInUser")]特性标记的页面,都能正常生效。

内容的提问来源于stack exchange,提问作者Webreaper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:36:00