要解决这个问题,可以在Startup.cs文件中修改应用程序的授权配置。在ConfigureServices方法中,将策略添加到服务中。然后,在Configure方法中,将添加自己的授权中间件。
以下是示例代码:
Startup.cs文件:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AdminsOnly", policy => policy.RequireRole("admin"));
});
services.AddScoped
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.Use(async (context, next) =>
{
var page = context.GetRazorPage();
if (page != null)
{
await context.AuthorizeAsync(page, "AdminsOnly");
}
await next();
});
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
在上面的示例中,我们在ConfigureServices方法中添加了“AdminsOnly”策略,并在Configure方法中添加了自定义授权中间件。该授权中间件在每个请求的末尾运行,以确保PageModel上的Authorize特性的授权处理程序只在执行了策略集合中的文件夹级别策略后运行。