【问题标题】:Dynamically add roles to authorize attribute for controller in ASP.NET 5在 ASP.NET 5 中动态添加角色以授权控制器的属性
【发布时间】:2016-01-09 15:29:24
【问题描述】:

我对这篇文章 Dynamically add roles to authorize attribute for controller 有一个示例问题,但对于 ASP.NET 5 (vNext) 在 ASP.NET 5 中,我不能像上面的帖子所说的那样覆盖 AuthorizeAttribute 类。那么如何在 ASP.NET 5 (vNext) 中动态添加角色控制器

提前致谢。

【问题讨论】:

标签: authentication authorization asp.net-core


【解决方案1】:

正如迈克所说,您需要政策。这是一种实现。

public class CustomRoleRequirement : AuthorizationHandler<CustomRoleRequirement>, IAuthorizationRequirement
{
    protected override void Handle(Microsoft.AspNet.Authorization.AuthorizationContext context, CustomRoleRequirement requirement)
    {
        var roles = new[] { "Admin", "Admin2", "Admin3" };  //Get From DB.
        var userIsInRole = roles.Any(role => context.User.IsInRole(role));
        if (!userIsInRole)
        {
            context.Fail();
            return;
        }

        context.Succeed(requirement);
    }
}

并且在startup.cs的ConfigureServices方法中

services.ConfigureAuthorization(options =>{
    options.AddPolicy("CustomRole", policy => policy.AddRequirements(new CustomRoleRequirement()));
});

而且你需要像这样在控制器中提供 autorize 属性。

[Authorize(Policy = "CustomRole")]

来源:https://forums.asp.net/post/5975557.aspx

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我们甚至需要自定义授权处理程序吗?下面的代码不会做同样的事情吗?

    var roles = new[] { "Admin", "Admin2", "Admin3" };  //Get From DB.
        options.AddPolicy("CustomRole", policy =>
                        {
                            policy.RequireRole(roles);            
                        });
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2017-12-01
      • 2011-09-03
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多