【问题标题】:Asp.Net Core RazorPages AuthorizeFolder with an exceptional page带有特殊页面的 Asp.Net Core RazorPages AuthorizeFolder
【发布时间】:2019-12-05 11:08:38
【问题描述】:

在 asp.net core 3 的 RazorPagesOptions 中,

我授权了一个文件夹FolderA,其策略为PolicyA,如下所示。

options.Conventions.AuthorizeFolder("/FolderA", "PolicyA");

但我想对FolderA 下的页面PageB 应用特殊策略PolicyB
使拥有PolicyB但未拥有PolicyA的用户可以访问PageB
虽然无法访问FolderA下的其他页面。

我尝试添加如下页面授权

options.Conventions.AuthorizePage("/FolderA/PageB", "PolicyB");

但是,它不允许在没有PolicyA 的情况下授权PolicyB 的用户访问PageB

有没有办法为授权文件夹下的特定页面提供策略例外?

【问题讨论】:

    标签: asp.net-core authorization razor-pages


    【解决方案1】:

    作为一种解决方法,您可以动态检查策略中的路径以允许特定页面。例如:

    services.AddRazorPages().AddRazorPagesOptions(options =>
    {
    
        options.Conventions.AuthorizeFolder("/FolderA", "PolicyA");
    
    });
    services.AddAuthorization(options =>
    {
        options.AddPolicy("PolicyA", policy =>
        {
            policy.RequireAssertion(context =>
            {
                var resource = context.Resource.ToString();
    
                if (resource.Equals("/FolderA/PageB"))
                {
                    return true;
                }                
                return false;                
            });
        });
    });
    

    这样对 FolderA 的任何请求都会触发策略,然后您可以在策略中添加自定义逻辑,例如,检查来自 context.User.Claims 的用户声明。

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 2019-05-17
      • 2020-10-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多