web-dev-qa-db-ja.com

ASP.NETのIdentityUserRole2.0でロール名を取得する

Entity Frameworkのdllを更新する前は、これを行うことができました

user.Roles.Where(r => r.Role.Name == "Admin").FisrtOrDefault(); 

現在、r.RoleIdしか実行できず、ロールIDの名前を取得する方法が見つかりません。これをコントローラーとAuthorizeAttributeクラスで使用しています。

誰かがここで私を助けてくれますか?

よろしく

12
MarBVI

RoleMananger

RoleManager.Roles.
// or
RoleManager.FindByIdAsync()
// or 
RoleManager.FindByNameAsync()

Asp.Net Security および Asp.Net Identity で、時間をかけて新しいセキュリティ機能を学習することをお勧めします。

8
Erik Philips

これを試して

string id = UserManager.FindByEmail(model.Email).Id;
IList<string> roleNames=UserManager.GetRoles(id);
8
Neeraj Singh

ユーザーがロールに属しているかどうかを確認することが目的の場合は、アクションでIPrincipal.Userオブジェクトからアクセスできます。

User.IsInRole("Admin");
1
Phil

私はちょうど ほぼまったく同じ問題 を持っていて、私はそれを次のように解決しました:

_public class UserRole : IdentityUserRole
{
    public virtual Role Role { get; set; } // add this to see roles
    public virtual User User { get; set; } // add this to see users
}
_

これで、元のコードuser.Roles.Where(r => r.Role.Name == "Admin").FirstOrDefault();が機能します。これは、何らかの理由でRoleManagerに簡単にアクセスできない場合に便利です。

0
Ed Graham