【问题标题】:Using claims or just roles in ASP.NET Core MVC在 ASP.NET Core MVC 中使用声明或仅使用角色
【发布时间】:2020-08-14 13:27:00
【问题描述】:

在我的 ASP.NET Core MVC 项目中,我有这样一个场景:一个管理器可以在 Web 应用程序中做任何事情,你可以称它为超级管理器,并且只有一个用户。这个“超级”经理可以添加其他更受限制的经理,例如这些经理不能创建经理类型的用户,或者看不到某些信息。

从技术上讲,它们有很多共同点。我已经有很多角色类型,所以我不想创建另一个称为超级经理的角色类型,我将只创建一个用户。那么在这种情况下我应该使用声明吗?还是只创建两个角色更好?我知道它不会那么复杂,但我想知道最佳做法。

我是 ASP.NET Core 的新手,因此非常感谢可以帮助我的示例或文章,谢谢!

【问题讨论】:

    标签: asp.net asp.net-core roles claims-based-identity claims


    【解决方案1】:

    在我看来,通过声明或角色声明添加超级管理员没有区别,角色声明也是声明的一种。

    在我看来,如果您没有特殊要求需要通过声明添加用户超级管理员,最好的方法是使用声明。由于您可以直接使用[Authorize(Roles = "Superadmin")],而无需编写其他代码来使用身份工厂添加声明。

    如果您想通过声明添加超级管理员,您应该使用像 answer 这样的 UserClaimsPrincipalFactory 并像这样添加声明策略 article 显示。

    【讨论】:

    • 我想我同意你的看法,谢谢你的回答!
    • 如果您觉得我的回复对您有所帮助,请将其标记为答案,以便其他遇到相同问题的人更容易找到答案。非常感谢。
    【解决方案2】:

    我建议如果你需要创建多个角色,你可以使用 Claims-based authorization.

    你可以使用Authorize[Roles = "Admin"]属性或者你可以创建一个自定义的AuthorizeAttribute,例如:

      public class AuthorizeAccess : AuthorizeAttribute, IAuthorizationFilter
        {
            public string UniqueCode { get; set; }
    
            public void OnAuthorization(AuthorizationFilterContext context)
            {
                if (!context.HttpContext.User.HasClaim(c => c.Type == "CustomAccess" && c.Value.Equals(UniqueCode)))
                {
                    // Redirect AccessDenied when the claim not exist.
                    context.Result = new RedirectToPageResult("/AccessDenied");
                    return;
                }
            }
        }
    

    我们可以使用它

    [AuthorizeAccess(UniqueCode = "EDIT")]
    public class IndexModel : PageModel
    {
             ....
    }
    

    在这种情况下,您需要在登录访问中加载声明列表

    identity.AddClaim(new Claim("CustomAccess", "HOME_PAGE"));
    identity.AddClaim(new Claim("CustomAccess", "EDIT"));
    identity.AddClaim(new Claim("CustomAccess", "DELETE"));
    identity.AddClaim(new Claim("CustomAccess", "INSERT"));
    

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2018-02-10
      • 2017-06-21
      • 2017-09-10
      相关资源
      最近更新 更多