繁体   English   中英

ASP.NET Core 6 MVC:动态创建授权策略

[英]ASP.NET Core 6 MVC : create authorization policy dynamically

我正在创建一个 ASP.NET Core 6 MVC 应用程序。

用户登录后,我 go 到数据库并返回可用于整个应用程序的对象(文本框、按钮)的角色。

对于这些Object-Roles ,我想创建一个授权策略,用户将使用该策略来访问或不访问该 object。

据我所知和我的经验,该策略是在program.cs中设置的。

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminAccess", policy => policy.RequireRole("Admin"));
}

但在这种情况下,我必须在加载program.cs之后在其他地方动态地执行此操作。

生成这些策略的最佳方法是什么?

谢谢

授权处理程序负责评估需求的属性。 然后,您可以根据提供的 AuthorizationHandlerContext 评估要求以确定是否允许访问。

然后它看起来像这样的代码:

services.AddAuthorization(options =>
{
    options.AddPolicy("ThePolicy", policy => policy.Requirements.Add( new ThePolicyRequirement() ));
});

services.AddScoped<IAuthorizationHandler, MyPolicyAuthorizationHandler>();

那么你就可以

public class MyPolicyAuthorizationHandler : AuthorizationHandler<MyPolicyRequirement>
{
  readonly AppDbContext _context;


public MyPolicyAuthorizationHandler(DbContext c)
{
    _context = c;
   
}

protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyPolicyRequirement requirement)
{
    // Check context.User and context.Resource against db
     ....
    if (_context.PolicyRequirements.FirstOrDefault(....) && context.User.HasClaim("Some claim"))
     {
        
        context.Succeed(requirement);
     }

    return Task.CompletedTask;   
    ....
   }               
  }
}

public class MyPolicyRequirement : IAuthorizationRequirement { }

在此处查看有关授权处理程序和要求的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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