예제 #1
0
        public async Task <ActionResult> Create(Person person)
        {
            var authDB = new ApplicationDbContext();
            var db     = new StudentAbsenceEntities();

            ViewBag.Roles = new SelectList(authDB.Roles, "Name", "Name");

            if (!db.IsLoginUnique(person.Login))
            {
                ModelState.AddModelError(string.Empty, "Пользователь с таким именем уже существует!");
            }

            if (ModelState.IsValid)
            {
                var store    = new UserStore <ApplicationUser>(authDB);
                var manager  = new ApplicationUserManager(store);
                var authUser = new ApplicationUser()
                {
                    UserName = person.Login, Email = person.Email
                };
                await manager.CreateAsync(authUser, person.Password);

                var role          = authDB.Roles.First(r => r.Name == person.Role);
                var savedAuthUser = authDB.Users.First(u => u.UserName == person.Login);
                authUser.Roles.Add(new IdentityUserRole()
                {
                    RoleId = role.Id, UserId = savedAuthUser.Id
                });
                authDB.SaveChanges();

                var savedPerson = db.Person.Add(person);
                var userRole    = db.Role.First(r => r.Role1 == person.Role);
                db.User.Add(new User()
                {
                    login = person.Login, PersonId = savedPerson.Id, Role = userRole
                });
                db.SaveChanges();

                if (person.Role == "Студент")
                {
                    db.Student.Add(new Student()
                    {
                        PersonId = savedPerson.Id, RecordBookNumber = "0000000", BirthDate = DateTime.Today, GroupId = null
                    });
                }
                else
                {
                    if (person.Role == "Преподаватель")
                    {
                        db.Teacher.Add(new Teacher()
                        {
                            PersonId = savedPerson.Id
                        });
                    }
                }
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(person));
        }