예제 #1
0
        //変更内容を自動的で実行されるもの
        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 });
        }
예제 #2
0
        //マイグレーション実行後に自動で実行される処理
        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 });
        }
예제 #3
0
        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));
        }
예제 #6
0
        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 });
        }
예제 #7
0
        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 });
        }