2016-12-06 4 views
0

アイデンティティを持つASP.NET MVCを使用してWebアプリケーションを保護しています。私は "canEdit"ロールを作成し、5人のユーザーがデータベースにシードしたいと思っています。複数のユーザーがロールに割り当てられているデータベースをシードする方法

私はもともととしてこれを試してみました:

bool AddUserAndRole(ERPWAG.Models.ApplicationDbContext context) 
    { 
     IdentityResult ir; 
     var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); 
     ir = rm.Create(new IdentityRole("canEdit")); 

     var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
     var user = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user.Id, "canEdit"); 
     return ir.Succeeded; 

     var user2 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user2.Id, "canEdit"); 
     return ir.Succeeded; 

     var user3 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 

     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user3.Id, "canEdit"); 
     return ir.Succeeded; 

     var user4 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password!"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user4.Id, "canEdit"); 
     return ir.Succeeded; 

     var user5 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user5.Id, "canEdit"); 
     return ir.Succeeded; 
    } 

私はその後、更新データベースと呼ばれると発表され、Configuration.csの私の種子方法でAddUserAndrole(context)と呼ばれます。

ユーザーがこのサイトにログインできませんでした。これらのユーザーにIDデータベースを事前に移入して役割に関連付けるには、どのような方法が最適ですか。

答えて

1

ユーザーアカウントを作成するための単一のユーザーを渡す役割に割り当てることができます:

bool CreateDefaultUsers(YourApp.Models.ApplicationDbContext context, string uname, string uemail, string upass, string urole) 
    { 
     IdentityResult ir; 
     var um = new UserManager<ApplicationUser>(
      new UserStore<ApplicationUser>(context)); 
     var user = new ApplicationUser() 
     { 
      UserName = uname, 
      Email = uemail, 
     }; 
     ir = um.Create(user, upass); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user.Id, urole); 
     return ir.Succeeded; 
    } 

そして、あなたの種子からそれを呼び出すここで

はアイデンティティを播種上の別のリンクです方法は次のようになります:

ir = CreateDefaultUsers(context, "Bob", "[email protected]", "Password1", "Publisher"); 

あなたはおそらく配列を作成し、呼び出しを8回繰り返すあなたのユーザーの価値と一緒に。

@Steve Greeneが投稿したパスワード要件についても検討します。

[UPDATE]

この例では、ユーザー名に電子メールを使用していないことを前提としています。いずれの場合も、方法は同じである。

0

コードが実行され、レコードがテーブルに挿入されている(最初にチェックしてください)と、パスワードポリシーが「パスワード」を許可しない可能性があります。

PasswordValidatorルールを検索します。鉱山は:

// Configure validation logic for passwords 
manager.PasswordValidator = new PasswordValidator 
{ 
    RequiredLength = 8, 
    RequireNonLetterOrDigit = false, 
    RequireDigit = true, 
    RequireLowercase = true, 
    RequireUppercase = true, 
}; 

したがって、パスワードをルールに合わせるか、バリデーターを変更してください。これによりSeed Entities AND Users, Roles?

+0

お返事ありがとうございます。私は質問を投稿する前に電子メールアドレスとパスワードを「きれいにする」。したがって、パスワードは大文字、数字、特殊文字、必要な長さで強くなります。 – SidC

+0

レコードはデータベースにありますか? SignInの結果はOKですか?あなたの問題はどこですか? –

関連する問題