繁体   English   中英

是否可以根据从 appsettings.json 加载的 boolean 值有条件地将属性关联到 class

[英]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 条件有条件地返回AuthorizeAttributeAllowAnonymousAttribute 但即便如此,我仍然不确定这是否可行,因为这似乎仍然取决于运行时条件。

任何帮助和建议表示赞赏。

通过使用授权策略,您可以更改启动时(或在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM