[英]Is it possible to conditionally associate an attribute onto a class based on boolean value loaded from appsettings.json
我有一些页面 model 类,并希望使这些模型控制的页面可以匿名访问,或者只有在用户根据我的appsettings.json
文件中配置的 boolean 条件进行身份验证时才能查看。 类似于以下内容(语法显然不正确,但我希望它清楚地表明了我的意图)。
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
boolCondition ? [Authorize] : [AllowAnonymous]
public class IndexModel : PageModel
{
...
}
基于这里的答案,即使它有点旧,我实际上也不确定我想要做的事情是否在 C# 中是可能的。 坦率地说,这个答案有点让我头疼,所以我不知道它对我的情况有多适用。
想到的另一种可能的方法是创建我自己的自定义属性 class,并在其中根据 boolean 条件有条件地返回AuthorizeAttribute
或AllowAnonymousAttribute
。 但即便如此,我仍然不确定这是否可行,因为这似乎仍然取决于运行时条件。
任何帮助和建议表示赞赏。
通过使用授权策略,您可以更改启动时(或在IConfigureOptions<AuthorizationOptions>
服务中)的含义。
您可以更改所有[Authorize]
属性的默认策略;
services.AddAuthorization(o => {
var builder = new AuthorizationPolicyBuilder();
if (<something>){
builder.RequireAssertion(c => true);
}else{
builder.RequireAuthenticatedUser();
}
o.DefaultPolicy = builder.Build();
});
或者引入仅适用于某些[Authorize(Policy="Name")]
的新策略。
services.AddAuthorization(o => {
o.AddPolicy("Name", builder => {
if (<something>){
builder.RequireAssertion(c => true);
}else{
builder.RequireAuthenticatedUser();
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.