我有一段代碼可讓管理員通過電子郵件添加新的管理員。我檢查用戶是否在我們的系統中。如果是,我檢查它是否已經一個管理員。奇怪的是,已經擁有「管理員」聲明的用戶仍將作爲管理員添加,從而有效地爲他們提供了另一個與數據庫中相同的聲明。經過一些調試後,我發現IsInRoleAsync將始終返回false。這可能是什麼原因?管理員聲明已添加到IdentityUser,但用戶管理員找不到IsInRoleAsync
public async Task<IActionResult> VoegAdminToe(VoegAdminToeViewModel vam)
{
if (ModelState.IsValid)
{
Gebruiker g = _gebruikerRepository.GetByEmail(vam.Email);
if (g != null)
{
bool isAdmin = await _userManager.IsInRoleAsync(g, "admin");
if (!isAdmin)
{
await _userManager.AddClaimAsync(g, new Claim(ClaimTypes.Role, "admin"));
return RedirectToAction(nameof(Index));
}
ModelState.AddModelError("GebruikerAlAdmin", "Deze gebruiker is al Admin");
return View(vam);
}
ModelState.AddModelError("GebruikerNull","Deze gebruiker zit niet in het systeem");
return View(vam);
}
else
{
return View(vam);
}
}
我的猜測是功能IsInRoleAsync不會去尋找在表AspNetUserClaims,但我不能肯定是否有檢查此的另一種方法。
所以,如果用戶有一個取值爲「管理員」,那麼它是管理員索賠?你至少應該檢查這個類型是否也是「角色」。 –