管理者が電子メールで新しい管理者を追加できるコードがあります。ユーザーが私たちのシステムにいるかどうかを確認します。そうであれば、がすでにの管理者であることを確認します。奇妙なことは、既に「admin」という主張を持っているユーザーは引き続き管理者として追加され、事実上、データベース内で別の同じ主張を与えることです。いくつかのデバッグ後、私はIsInRoleAsyncが常にfalseを返すことを発見しました。これの原因は何か?管理者のクレームはIdentityUserに追加されましたが、Usermanagerは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に見て行かないだろうということでしょうが、私はこれをチェックするための別の方法があるかどうかなりよく分かりません。
したがって、ユーザーに値「admin」のクレームがある場合は、管理者ですか?少なくとも、そのタイプが「役割」であるかどうかを少なくともチェックする必要があります。 –