特定のクレームを持つすべてのユーザーを取得する

asp.net-core asp.net-identity claims-based-identity entity-framework-core

質問

私はaspnetコア1.0プロジェクトに取り組んでいます。私は最近、主張が何であるか、ポリシーベースの承認を達成するためにそれらを使用する方法を理解しました。

私が達成しようとしていること:

特定のポリシーで許可されているすべてのユーザーを取得したいとします(つまり、 Claim {Type = "CanReceiveXReport", Value = True}

私がこれを行うと期待しているコードは、次のようなものです:

public static IQueryable<User> WithClaim(this IQueryable<User> users, string claimName) =>
    users
        .Include(u=> u.Claims)
        .Where(u=> u.Claims.Any(c=> c.ClaimType == claimName));

問題:

上記のコードを実行すると、すべてのユーザーに対して、 user.Claimsは常に空です。また、 ToList()Include()後に追加してクエリを実現しようとしましたが、成功しませんでした。


これが機能していないことを認識したとき、私はこの種の操作を行う何らかの種類のClaimsManager<T>が存在することを期待していました。

私が見つけたすべてのapisと答えは、単一のユーザーの主張を得ることに焦点を当てています。

私はこの答えのような何かをすることができますが、私はむしろそれをしないことを知っています、私はそのクエリがデータベースで実行されることを望みます。

私は、ストアドプロシージャを作成することは可能ですが、私はむしろ私のアプリケーションで私のドメインのロジックをmantainたいと思います。

バージョン:

(私は関連性があると思う)

{
    "Microsoft.AspNetCore.Identity": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.EntityFrameworkCore.Relational": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
    "Microsoft.NETCore.App": "1.0.0"
}

人気のある回答

私はあなたがUserManagerでこのメソッドを探していると信じています:

/// <summary>
/// Returns a list of users from the user store who have the specified <paramref name="claim"/>.
/// </summary>
/// <param name="claim">The claim to look for.</param>
/// <returns>
/// A <see cref="Task{TResult}"/> that represents the result of the asynchronous query, a list of <typeparamref name="TUser"/>s who
/// have the specified claim.
/// </returns>
public virtual Task<IList<TUser>> GetUsersForClaimAsync(Claim claim)
{
    ThrowIfDisposed();
    var store = GetClaimStore();
    if (claim == null)
    {
        throw new ArgumentNullException(nameof(claim));
    }
    return store.GetUsersForClaimAsync(claim, CancellationToken);
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ