簡體   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