Entity Frameworkのdllを更新する前は、これを行うことができました
user.Roles.Where(r => r.Role.Name == "Admin").FisrtOrDefault();
現在、r.RoleIdしか実行できず、ロールIDの名前を取得する方法が見つかりません。これをコントローラーとAuthorizeAttributeクラスで使用しています。
誰かがここで私を助けてくれますか?
よろしく
RoleManager.Roles.
// or
RoleManager.FindByIdAsync()
// or
RoleManager.FindByNameAsync()
Asp.Net Security および Asp.Net Identity で、時間をかけて新しいセキュリティ機能を学習することをお勧めします。
これを試して
string id = UserManager.FindByEmail(model.Email).Id;
IList<string> roleNames=UserManager.GetRoles(id);
ユーザーがロールに属しているかどうかを確認することが目的の場合は、アクションでIPrincipal.Userオブジェクトからアクセスできます。
User.IsInRole("Admin");
私はちょうど ほぼまったく同じ問題 を持っていて、私はそれを次のように解決しました:
_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
に簡単にアクセスできない場合に便利です。