MVC5 - 在控制器中使用角色

时间:2014-02-12 18:39:28

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

非常感谢有关此主题的帮助:

我正在尝试使用自己的角色,就像我在MVC4(自定义成员资格)上所做的那样。 [授权(roles =“Admin”)]为某些控制器。 我对新身份的事情有点困惑。

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

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

  1. 从我的SQL DB(实体)读取一个“登录”类,该类具有用户名,密码和角色。 (角色是角色的枚举,{Admin = 1,Manager = 2 ...}
  2. 使用我登录的角色,并将其翻译为与新“身份”一起使用。
  3. 使用[授权(roles =“Admin”)],[AllowAnonymous]等管理常规控制器
  4. 使用相同的东西管理API控制器。
  5. 我已经阅读了有关自定义的内容,但它似乎太复杂了。

    任何人都有一个简单的例子,说明如何使用它简单明了?

    由于

2 个答案:

答案 0 :(得分:2)

我这样做:

 // 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,则可以轻松完成。 “开箱即用”的会员资格仍然很糟糕。

答案 1 :(得分:1)

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

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

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

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