私はASP.NETコアの初心者です。私は役割、主張とユーザーの関係に立ち往生しています。ASP.NETのコアアイデンティティの役割、クレームおよびユーザー
私はベンユーザーを持って、ユーザーは、管理ロールに属しています。 管理者ロールには、ビューページおよび編集ページデータベースがあります。
しかし、私は、そのユーザーに属することを主張し、役割を取得することはできません。
(コード内のコメントを参照してください)私の心の中で
var user = await _userManager.FindByNameAsync(applicationUser.UserName);
if(user != null) {
var userClaims = await _userManager.GetClaimsAsync(user); // empty, WHY ?
var userRoles = await _userManager.GetRolesAsync(user); // ['admin']
var adminRole = DbContext.Roles.FirstOrDefault(x => x.Name == "Admin");
IList<Claim> adminClaims;
if(adminRole != null)
{
adminClaims = await _roleManager.GetClaimsAsync(adminRole);
// correct => ['view-page', 'edit-page']
}
}
}
をユーザーがメンバーであるとき、私は理解して役割の主張を継承します。
- ユーザー:
デフォルトASP.NETアイデンティティは5つのテーブルを持っています。
- 役割。
- UserRoles - ユーザーは多くの役割を持つことができます。
- RoleClaims - ロールは多くのクレームを持つことができます。
- UserClaims - ユーザーは多くのクレームを持つことができます。
正しいと思いますか?なぜuserManager.GetClaimsAsync(user)が空白の要求を返すのですか?
提案がありますか?
web apiでJWTを作成するというユーザークレームを取得する必要があります。そのため、トークンに有効なユーザークレーム/ロールが含まれていない場合、私はUser.Claimsを使用できません。そして私はUserManagerと思う。GetClaimsAsync(user)がUserRolesテーブルをクエリーするのは間違っています。まさにUserClaimsテーブルをクエリしています。あなたはこの状況について何か提案していますか? – trinvh
@trinvh "UserManager.GetClaimsAsync(user)がUserRolesにクエリを実行しました"というエラーが修正されました。 – tmg
上記のリンクのため正解とマークしました。誰もが、createAsyncメソッドを参照する必要があるという主張を取得したい – trinvh