【问题标题】:MVC5 - using Roles in controllersMVC5 - 在控制器中使用角色
【发布时间】:2014-03-11 07:08:51
【问题描述】:

不胜感激有关此主题的帮助:

我正在尝试使用我自己的角色,就像我在 MVC4(自定义成员资格)IE 上所做的那样。 [Authorize(roles="Admin")] 用于某些控制器。 我对新的 Identity 有点困惑。

稍后,我还需要为 API 控制器使用相同的角色。

有人可以解释我如何以最简单的方式实现以下目标:

  1. 从我的 SQL DB(实体)中读取“登录”类,该类具有用户名、密码和角色。 (角色是角色的枚举,{Admin = 1, Manager = 2...}
  2. 使用我登录中的角色,并将其转换为与新的“身份”一起使用。
  3. 使用 [Authorize(roles="Admin")]、[AllowAnonymous] 等管理常规控制器
  4. 用同样的东西管理 API 控制器。

我已经阅读了有关自定义的内容,但似乎太复杂了。

谁有一个简单的例子说明如何简单明了地使用它?

谢谢

【问题讨论】:

    标签: authorization asp.net-mvc-5 roles identity


    【解决方案1】:

    我会这样做:

     // Just for Reference
    public interface IUserIdentity
    {
        Guid UserId { get; set; }
        string UserName { get; set; }
    
    }
    

    传入一个包含你的角色的列表..

    List<Claim> claims = new List<Claim>();
    

    claims.Add(new Claim(ClaimType.Role,"Admin"));

     public ClaimsIdentity CreateIdentity(IUserIdentity user, IEnumerable<Claim> claims, string authenticationType)
        {
            var identity = new ClaimsIdentity(claims, authenticationType);
            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString()));
            identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
            return identity;
        }
    

    如果您使用的是 ASP.NET Identiy,这可以轻松完成。 “开箱即用”的会员资格仍然很烂。

    【讨论】:

      【解决方案2】:

      如果您已经拥有自己的身份系统,那么使用 ASP.NET Identity 的原因是什么?您需要索赔支持吗?

      ASP.NET Identity 可以完成您描述的所有事情,但是很难将其集成到现有的会员系统中(因为 ASP.NET Identity 是作为 ASP.NET 平台上现有会员框架的替代品而开发的)。你的角色系统有什么特别的吗?是否集成了任何业务规则?如果没有,将您的角色系统转换为 ASP.NET Identity 提供的角色系统应该不难。

      我将尝试从 ASP.NET 身份的角度回答您的观点:

      1. 这由IdentityUser 类处理。在那里您会找到 Roles、UserName 和 PasswordHash 属性。如果您想自定义它,您可以在派生类中添加新属性。请记住,Roles 属性是 IdentityUserRoles 的集合,这意味着没有内置枚举(而是指向 IdentityRole 类)。
      2. 没有必要(见第 1 点)。
      3. 可以从 ASP.NET 标识中使用。工作方式与以前相同。
      4. 工作方式与以前相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多