[英]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.