繁体   English   中英

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

[英]How to convert from IdentityUserRole to IdentityRole (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。 我怎样才能从一个转换为另一个? 有没有其他方法可以完成我想做的事情?

显式强制转换不起作用。

考虑使用UserManager

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

// 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的响应的方法 ,只需使用来自用户和角色的Id来构建对象并将其添加到用户。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM