使用ClaimsIdentity ext。来自控制器

时间:2015-11-02 08:11:08

标签: c# .net asp.net-mvc

我找到了这个返回记录用户角色的扩展方法。

public static List<string> Roles(this ClaimsIdentity identity)
    {
        return identity.Claims
                       .Where(c => c.Type == ClaimTypes.Role)
                       .Select(c => c.Value)
                       .ToList();
    }

我该如何使用这个分机。控制器的方法?或者是否可以进一步扩展此方法以使用User.Identity然后获得用户角色?

1 个答案:

答案 0 :(得分:0)

namespace Identity.Extensions
{
    public static class UserExtensions()
    {
        public static List<string> Roles(this ClaimsIdentity identity)
        {
        return identity.Claims
                   .Where(c => c.Type == ClaimTypes.Role)
                   .Select(c => c.Value)
                   .ToList();
        }
    }
}

获取扩展方法所在的命名空间,上面的示例为Identity.Extensions,并将其作为using语句添加到要使用该方法的文件中。

using Identity.Extensions;

然后,如果您有一个ClaimsIdentity对象,例如从用户管理器的CreateIdentityAsync方法返回的对象,您将能够访问此方法:

using Identity.Extensions;

public class YourClass()
{
    public void DoSoemthingWithUser()
    {
         var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

        // Use extension method
        var roles = identity.Roles();
    }

    public UserManager UserManager
    {
        get
        {
            return HttpContext.Current.GetOwinContext().GetUserManager<UserManager<IdentityUser>>(); 
        }
    }
}