0

3 つのロールを追加しました。

  1. 管理者
  2. スタッフ
  3. 登録済み

ここで、すべてのユーザーのリストを表示したいと思いRegisteredます。私は次のようなことをしようとしているので、IDシステムを取得していないのではないかと心配しています:

ネタバレ注意: 動作しないコード

var listOfNames = _unitOfWork.UserRepository.All()
                                            .Where(u => u.Roles.Contains("Registered"))
                                            .ToList();

これは明らかにうまくいかないので、答えを探しに行きました。残念ながら、私は何も得られませんでした。私が見つけた最も近いIUserRoleStoreものは、次の実装があると述べた Scott Allen による投稿でした。

  • ユーザーを役割に追加する
  • ユーザーのすべてのロールを取得する
  • ユーザーが特定のロールに属していることを確認します
  • ロールからユーザーを削除する

しかし、それでも、それを取得していません:/

この Questionのメソッドも試しましたがRoles.Select(r => r.Name).Contains("client")、 Name プロパティが見つからないため機能しませんか?

この ApplicationUser オブジェクトのリストを取得するにはどうすればよいですか?

アップデート


ショーンの答えは、もう少し深く掘り下げるのに役立ちました。これが最善の方法かどうかはわかりませんが、私のニーズには合っています。

var users = context.Users;
var roleUsers = context.Roles.Single(one => one.Name == "Registered").Users;

names = (from r in roleUsers
join u in users on r.UserId equals u.Id
select u.UserName).ToList();

これが非効率的である場合は、その理由と改善方法を教えてください。

4

1 に答える 1

2

AspNetIdentity2.0 を仮定すると...リポジトリ パターンを使用していることがわかりますRoleManager

var users = RoleManager.Roles.Single(x => x.Name == "Registered").Users;

残念ながら (そして誤解を招くように) これは のリストを返しますUserRolesが、少なくともユーザーのUserIdを取得しており、そこからUsers.

于 2014-03-26T21:32:20.773 に答える