如何创建满足至少一个声明的Blazor授权策略?
Blazor 实现“满足任一声明即通过”的授权策略
要实现用户拥有Admin=true或Moderator=true任一声明即可通过验证的授权策略,你可以使用RequireAssertion方法自定义验证逻辑,替代默认的RequireClaim(后者是且的关系)。
修改后的代码如下:
builder.Services.AddAuthorization(options => { options.FallbackPolicy = options.DefaultPolicy; options.AddPolicy("AdminsAndMods", policy => { policy.RequireAssertion(context => context.User.HasClaim(c => (c.Type == "Admin" && c.Value == "true") || (c.Type == "Moderator" && c.Value == "true") ) ); }); });
代码说明
RequireAssertion允许传入自定义验证逻辑委托,只要委托返回true,策略就会通过。- 这里的逻辑是检查用户是否拥有
Admin且值为true的声明,或者拥有Moderator且值为true的声明,满足任一条件即可通过授权。
配置完成后,在组件或控制器上使用[Authorize(Policy = "AdminsAndMods")]或者<AuthorizeView Policy="AdminsAndMods">时,用户只要符合其中一个声明要求就能访问受保护资源。
内容的提问来源于stack exchange,提问作者andrea
相关产品推荐
相关产品推荐

