私はユーザーを作成し、彼に多数の主張を持つ役割を付けました。問題は、Entity FrameworkのコアとIDの統合を使用してアクセスするための直接的な方法がないことです。私が理想的にやってみたいことは次のとおりです:役割クレームを取得するには?
return _context.Users
.Include(u => u.Roles)
.ThenInclude(r => r.Role)
.ThenInclude(r => r.Claims)
しかし、ロールのプロパティはRoleIdではありません。だから私は役割の主張を含めることはできません。もちろん、私はクレームを得るために、またはRoleManagerを使用するために別のクエリを作成します:
var user = _context.Users.Single(x => x.Id == ...);
var role = _roleManager.Roles.Single(x => x.Id == user.Roles.ElementAt(0).RoleId);
var claims = _roleManager.GetClaimsAsync(role).Result;
しかし、それは非効率的で醜いです。 1つのクエリを作成する方法があるはずです。
私の最後の希望はController.Userプロパティ(ClaimsIdentity)でした。どういうわけか、すべての役割からクレームをスマートに集約したいと思っていました。しかし、それは...
Controller.Userが動作するはずです:次に、あなただけのこのような何かを呼び出すことができます。それは私が現在ログインしているセッションを確認するために使用するものです。ログインしたセッションを確認していますか、他のユーザーを参照しようとしていますか? –
私はログインしたユーザーのためにそれを取得しようとしています。私はそれがうまくいくはずだと思ったが、そうではないようだ。それはUser.Claimsだけを得るように思えます。 – SiberianGuy
@Mike_G、理由は私がIdentityServerを使用していると思われ、デフォルトで役割クレームを処理しません。他の認証方法を使用した場合、デフォルトで役割要求を取得します。 – SiberianGuy