我有一段代码可让管理员通过电子邮件添加新的管理员。我检查用户是否在我们的系统中。如果是,我检查它是否已经一个管理员。奇怪的是,已经拥有“管理员”声明的用户仍将作为管理员添加,从而有效地为他们提供了另一个与数据库中相同的声明。经过一些调试后,我发现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,但我不能肯定是否有检查此的另一种方法。
所以,如果用户有一个取值为“管理员”,那么它是管理员索赔?你至少应该检查这个类型是否也是“角色”。 –