//変更内容を自動的で実行されるもの protected override void Seed(TodoApp.Models.TodoesContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // User admin = new User() { Id = 1, UserName = "******", Password = "******", Roles = new List <Role>() }; User kimura = new User() { Id = 2, UserName = "******", Password = "******", Roles = new List <Role>() }; Role administrators = new Role() { Id = 1, RoleName = "Administrators", Users = new List <User>() }; Role users = new Role() { Id = 2, RoleName = "Users", Users = new List <User>() }; var membershipProvider = new CustomMembershipProvider(); admin.Password = membershipProvider.GeneratePasswordHash(admin.UserName, admin.Password); kimura.Password = membershipProvider.GeneratePasswordHash(kimura.UserName, kimura.Password); admin.Roles.Add(administrators); administrators.Users.Add(admin); kimura.Roles.Add(administrators); administrators.Users.Add(kimura); context.Users.AddOrUpdate(user => user.Id, new User[] { admin }); context.Roles.AddOrUpdate(role => role.Id, new Role[] { administrators, users }); }
//マイグレーション実行後に自動で実行される処理 protected override void Seed(TodoApp.Models.TodoesContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. //初期データ登録処理 User admin = new User() { Id = 1, UserName = "******", Password = "******", Roles = new List <Role>() }; //一回できたのでもういらない //User alu = new User() //{ // Id = 2 , // UserName = "******", // Password = "******", // Roles = new List<Role>() //}; Role administrators = new Role() { Id = 1, RoleName = "Administrators", Users = new List <User>() }; Role users = new Role() { Id = 2, RoleName = "users", Users = new List <User>() }; //adminのパスワードハッシュ化 var membershipProvider = new CustomMembershipProvider(); admin.Password = membershipProvider.GeneratePasswordHash(admin.UserName, admin.Password); admin.Roles.Add(administrators); administrators.Users.Add(admin); //alu.Roles.Add(users); //users.Users.Add(alu); //ユーザとロールをDBに反映 //Seedクラスは引数にコンテキストクラスを持っている //コンテキストにユーザとロールを反映。 //ddOrUpdate→IDなければ追加、あれば更新。 //context.Users.AddOrUpdate(user => user.Id , new User[] { admin, alu }); context.Users.AddOrUpdate(user => user.Id, new User[] { admin }); context.Roles.AddOrUpdate(role => role.Id, new Role[] { administrators, users }); }
protected override void Seed(TodoApp.Models.TodoesContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. User admin = new User() { Id = 1, UserName = "******", Password = "******", Roles = new List <Role>() }; ///下記処理は検証に使用していた為、不要 //User kimura = new User() //{ // Id = 2, // UserName = "******", // Password = "******", // Roles = new List<Role>() //}; Role administrators = new Role() { Id = 1, RoleName = "Administrators", Users = new List <User>() }; Role users = new Role() { Id = 2, RoleName = "Users", Users = new List <User>() }; //adminのパスワードを取得する為にインスタンス生成しておく var membershipProvider = new CustomMembershipProvider(); //adminのパスワードをハッシュ化し、取得する admin.Password = membershipProvider.GeneratePasswordHash(admin.UserName, admin.Password); admin.Roles.Add(administrators); administrators.Users.Add(admin); ///下記処理も検証に使用ていた為、不要 //kimura.Roles.Add(users); //users.Users.Add(kimura); //下記の第二引数のkimuraを削除 context.Users.AddOrUpdate(user => user.Id, new User[] { admin }); context.Roles.AddOrUpdate(role => role.Id, new Role[] { administrators, users }); }
public ActionResult Create([Bind(Include = "Id,UserName,Password,RoleIds")] User user) // Bind先プロパティとしてRoleIdsを追加 { // ロールListBoxに対応しているのはUser.RoleIdsプロパティ(Role.Idのリスト)のため、これを元に選択されたRoleのリストを取得。 var selectedRoles = db.Roles.Where(role => user.RoleIds.Contains(role.Id)).ToList(); if (ModelState.IsValid) { user.Roles = selectedRoles; // 選択されたRoleのリストをuserパラメーターのRolesプロパティに設定 user.Password = _membershipProvider.GeneratePasswordHash(user.UserName, user.Password); // パスワードをハッシュ化 db.Users.Add(user); db.SaveChanges(); return(RedirectToAction("Index")); } // ModelState.IsValid=falseの場合にも入力画面に戻るために、DBから全Roleを取得しリストボックス表示用に加工(ViewBag.RoleIdsの設定)が必要。 // この際、リストボックス選択状態を復元するために、画面で選択されたRoleのコレクションを引数として渡す。 this.SetRoles(selectedRoles); return(View(user)); }
public ActionResult Create([Bind(Include = "Id,UserName,Password,RoleIds")] User user) { var roles = db.Roles.Where(role => user.RoleIds.Contains(role.Id)).ToList(); if (ModelState.IsValid) { user.Roles = roles; user.Password = membershipProvider.GeneratePasswordHash(user.UserName, user.Password); db.Users.Add(user); db.SaveChanges(); return(RedirectToAction("Index")); } this.SetRoles(roles); return(View(user)); }
protected override void Seed(TodoApp.Models.TodoesContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. //マイグレーション後に実行される User admin = new User() { Id = 1, UserName = "******", Password = "******", Roles = new List <Role>() }; Role administrators = new Role() { Id = 1, RoleName = "Administrators", Users = new List <User>() }; Role users = new Role() { Id = 2, RoleName = "Users", Users = new List <User>() }; var membershipProvider = new CustomMembershipProvider(); admin.Password = membershipProvider.GeneratePasswordHash(admin.UserName, admin.Password); admin.Roles.Add(administrators); administrators.Users.Add(admin); context.Users.AddOrUpdate(user => user.Id, new User[] { admin }); context.Roles.AddOrUpdate(role => role.Id, new Role[] { administrators, users }); }
protected override void Seed(TodoWebApp.Models.TodoesContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. //**************************************************************************************************** // 以下、自動生成後の手動追加コード: // ・UserとRoleの初期データを登録する処理を実装。 // - Userの初期データ: 管理者, 一般ユーザー // - Roleの初期データ: Administrators(管理者), Users(一般ユーザー) //**************************************************************************************************** //==================================================================================================== // User用意 //==================================================================================================== User admin = new User() // 管理者 { Id = 1, UserName = "******", Password = "******", Roles = new List <Role>(), //RoleIds = new List<int>(), }; User generalUser01 = new User() // 一般ユーザー { Id = 2, UserName = "******", Password = "******", Roles = new List <Role>(), //RoleIds = new List<int>(), }; //==================================================================================================== // Role用意 //==================================================================================================== Role administrators = new Role() // Administrators(管理者) { Id = 1, RoleName = "Administrators", Users = new List <User>(), }; Role users = new Role() // Users(一般ユーザー) { Id = 2, RoleName = "Users", Users = new List <User>(), }; //==================================================================================================== // パスワードをハッシュ化 //==================================================================================================== CustomMembershipProvider customMembershipProvider = new CustomMembershipProvider(); admin.Password = customMembershipProvider.GeneratePasswordHash(admin.UserName, admin.Password); generalUser01.Password = customMembershipProvider.GeneratePasswordHash(generalUser01.UserName, generalUser01.Password); //==================================================================================================== // User-Role設定 //==================================================================================================== admin.Roles.Add(administrators); //admin.RoleIds.Add(administrators.Id); administrators.Users.Add(admin); generalUser01.Roles.Add(users); //generalUser01.RoleIds.Add(users.Id); users.Users.Add(generalUser01); //==================================================================================================== // UserとRoleの情報をDBに反映 // * 本Seedメソッドの引数のcontextパラメータを利用してDBにアクセス。 // * DbSet<T>.AddOrUpdate(identifierExpression, entities)メソッド: DBに既存でなければ追加、既存なら更新。第1引数identifierExpressionに指定した値と同等のキーが存在すればAdd、存在しなければUpdate。 //==================================================================================================== context.Users.AddOrUpdate(user => user.Id, new User[] { admin, generalUser01 }); context.Roles.AddOrUpdate(role => role.Id, new Role[] { administrators, users }); }