如何从IdentityUserRole转换为IdentityRole(ASP.NET Core)

时间:2017-04-17 13:42:34

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

我正在为我的项目中的控制器工作。我试图做以下事情:

string role = "something";
var newRole = new IdentityRole();

newRole = _DbContext.Roles.Where(r => r.Name == role).FirstOrDefault().;
user.Roles.Add(newRole);

显然,user.Roles.Add()只将IdentityUserRole作为参数,但newRole的类型为IdentityRole。我怎样才能从一个转换为另一个?有没有其他方法可以完成我想做的事情?

明确投射不起作用。

2 个答案:

答案 0 :(得分:2)

考虑使用UserManager

通常,您可以使用AddToRoleAsync()对象中的UserManager方法来处理为用户分配角色,而不是直接在用户对象本身上添加角色。

// Example of instantiating the User Manager
private readonly UserManager<ApplicationUser> _userManager;
public AccountController(UserManager<ApplicationUser> userManager)
{
        _userManager = userManager;
}

// Example of adding a user to a given role
public void AddUserToRole(string userId, string role)
{
       var user = _userManager.FindByIdAsync(userId);
       if (user != null)
       {
             await _userManager.AddToRoleAsync(user, role);
       }
}

UserManager类负责确保在必要时正确创建,更新和保留有关用户的任何关系或信息,因此通常首选将这些类型的职责委派给它。

关于直接转化

关于直接转换,您可以使用类似于DavidG's response的方法,只需使用用户和角色中的Id来构建对象并将其添加到用户。

答案 1 :(得分:1)

IdentityUserRole对象用于将用户链接到角色,您只需要创建一个新的实例。您还需要要添加的角色的ID,例如:

var roleName = "something";
var role = _DbContext.Roles.Single(r => r.Name == roleName);
var userRole = new IdentityUserRole
{
    UserId = user.Id,
    RoleId = role.Id
};

user.Roles.Add(userRole);

但是,您应该真正使用UserManager类来实现此目的。它有一个AddToRoleAsync方法可以为您处理。

如果您确实不想使用异步方法,则可以使用非异步扩展。 https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx