、そこに種子方法であり、それは次のようになります。ASP.net MVC + ASP.netアイデンティティ播種ロールとユーザー
protected override void Seed(DatabaseContext context)
{
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var userManager = new UserManager<User>(new UserStore<User>(context));
if (!roleManager.RoleExists("Administrator"))
{
roleManager.Create(new IdentityRole("Administrator"));
}
var user = new User {UserName = "someUserName"};
if (userManager.FindByName("someUserName") == null)
{
var result = userManager.Create(user, "password");
if (result.Succeeded)
{
userManager.AddToRole(user.Id, "Administrator");
}
}
}
そしてPMコンソールに私が更新-データベース実行しましたそれは正常にデータベースをシードし、テーブルAspNetUserRolesで私はsomeUserNameと管理者ロールが接続されていることがわかります。
しかし、私は、コントローラ上の属性[Authorize(Roles = "Administrator")]
を入れたとき、私は私のユーザーがその役割ではなかったかのようにページにログインするためにリダイレクトされてきたので、私は私のコントローラにラインを追加しました:
var x = _userManager.IsInRole(_userManager.FindByName("someUserName").Id, "Administrator");
そして、 xは偽です。なぜこうなった ?それをどうやって修正することができますか?そして、これがデータベースをシードする正しい方法ではない場合、それは何ですか?