Exemplo n.º 1
0
        public ActionResult CreateUser()
        {
            var viewModel = new CreateUserFormViewModel
            {
                UserRoles = _context.Roles.ToList()
            };

            return(View(viewModel));
        }
 private CreateUserFormViewModel ReturnUserFormViewModelWithErrors(CreateUserFormViewModel model)
 => new CreateUserFormViewModel
 {
     Roles       = this.GetRoles(),
     Email       = model.Email,
     FirstName   = model.FirstName,
     LastName    = model.LastName,
     UserName    = model.UserName,
     WithoutRole = model.WithoutRole
 };
        public async Task <ActionResult> Create()
        {
            var viewModel = new CreateUserFormViewModel();

            viewModel.AllRolesList = new SelectList(
                items: await RoleManager.Roles.ToListAsync(),
                dataValueField: "Name",
                dataTextField: "Name");

            viewModel.AllClaimsList = new SelectList(
                items: ClaimsStore.AllClaims,
                dataValueField: "value",
                dataTextField: "type");

            return(View("CreateUserForm", viewModel));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Create(CreateUserFormViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }
            else
            {
                try
                {
                    var user = new User()
                    {
                        Email                   = viewModel.Email,
                        PasswordHash            = viewModel.PasswordHash,
                        UserName                = viewModel.UserName,
                        QuantidadeMembroFamilia = viewModel.QuantidadeMembroFamilia,
                        DespesasExcluidas       = false
                    };

                    var result = await _userManager.CreateAsync(user, user.PasswordHash);

                    if (result.Succeeded)
                    {
                        var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        var LinkConfirmacao = Url.Action("ConfirmEmail", "Users",
                                                         new { UserId = user.Id, Token = token }, Request.Scheme);

                        await SendConfirmationEmailAsync(token, user.Email, LinkConfirmacao, 1);

                        return(RedirectToAction(nameof(SuccessfullyAdded)));
                    }
                    else
                    {
                        foreach (var error in result.Errors)
                        {
                            ModelState.AddModelError("", error.Description.ToString());
                        }
                    }
                }
                catch (Exception e)
                {
                    return(RedirectToAction(nameof(Error), new { message = e.Message }));
                }
            }
            return(View(viewModel));
        }
        public async Task <IActionResult> Create(CreateUserFormViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(this.ReturnUserFormViewModelWithErrors(model)));
            }

            var user = new User
            {
                UserName  = model.UserName,
                Email     = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName
            };

            var password = this.GenerateRandomPassword();
            var result   = await userManager.CreateAsync(user, password);

            if (!result.Succeeded)
            {
                TempData[TempDataErrorMessageKey] = $"User with username {model.UserName} or email {model.Email} already exists.";
                return(View(this.ReturnUserFormViewModelWithErrors(model)));
            }

            if (!model.WithoutRole)
            {
                var existingRole = await this.roleManager.RoleExistsAsync(model.Role);

                if (!existingRole)
                {
                    ModelState.AddModelError(string.Empty, "Invalid role.");
                }

                await this.userManager.AddToRoleAsync(user, model.Role);
            }

            TempData[TempDataSuccessMessageKey] = $"Successfully created with password: {password}";
            return(RedirectToAction(nameof(Index)));
        }
        public async Task <ActionResult> Create(CreateUserFormViewModel viewModel, string[] selectedRoles, string[] selectedClaims)
        {
            // selectedRole is the name of the checkbox list on the html form

            // HERE WE ARE USING SAME FORM & VIEWMODEL FOR ADD & EDIT
            // BUT BOTH SCENARIOS ARE DIFFERENT,
            // ADD NEED PASSWORD & CONFIRM PASSWORD IN VIEW & VIEWMODEL & THEY ARE MANDATORY
            // WITH THEM MODEL WILL BE NOT VALIDATED
            // EDIT DO NOT NEED PASSWORD & CONFIRM PASSWORD IN VIEW & VIEWMODEL
            // MODEL VALIDATION WILL STOP US FROM EDITING USER AND WILL ASK FOR PASSWORKD & CONFIRM PASSWORD
            // SPLIT VIEWS & VIEWMODELS FOR ADD & EDIT

            IdentityResult  result = null;
            ApplicationUser user   = null;


            if (!ModelState.IsValid)
            {
                // Invalid Model, all Model Errors will be auto shown, no need to add yourself
                // Model has those Error Messages in it & Shown Automatically.
                ModelState.AddModelError("", "Something failed.");

                viewModel.AllRolesList = new SelectList(
                    items: await RoleManager.Roles.ToListAsync(),
                    dataValueField: "Name",
                    dataTextField: "Name");

                viewModel.AllClaimsList = new SelectList(
                    items: ClaimsStore.AllClaims,
                    dataValueField: "value",
                    dataTextField: "type");

                return(View("CreateUserForm", viewModel));
            }

            // New User
            user = new ApplicationUser
            {
                UserName       = viewModel.Email,
                Email          = viewModel.Email,
                DrivingLicense = viewModel.DrivingLicense,
                Phone          = viewModel.Phone,
            };


            result = await UserManager.CreateAsync(user, viewModel.Password);

            if (!result.Succeeded)
            {
                // Error occures while Adding New User
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError("", error);
                }

                viewModel.AllRolesList = new SelectList(
                    items: await RoleManager.Roles.ToListAsync(),
                    dataValueField: "Name",
                    dataTextField: "Name");

                viewModel.AllClaimsList = new SelectList(
                    items: ClaimsStore.AllClaims,
                    dataValueField: "value",
                    dataTextField: "type");

                return(View("CreateUserForm", viewModel));
            }


            // New User Added Successfully now add it roles
            if (selectedRoles == null)
            {
                ViewBag.Message = "Record(s) addded successfully.";
                return(List());
            }

            // If some roles are selected for New User, Add those roles
            result = await UserManager.AddToRolesAsync(user.Id, selectedRoles);

            // Errors occurs while adding Roles to New user
            if (!result.Succeeded)
            {
                // Error occurs while adding roles
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError("", error);
                }

                viewModel.AllRolesList = new SelectList(
                    items: await RoleManager.Roles.ToListAsync(),
                    dataValueField: "Name",
                    dataTextField: "Name");

                viewModel.AllClaimsList = new SelectList(
                    items: ClaimsStore.AllClaims,
                    dataValueField: "value",
                    dataTextField: "type");

                return(View("CreateUserForm", viewModel));
            }

            List <Claim> selectedClaimsOnForm = ClaimsStore.AllClaims.Where(c => selectedClaims.Contains(c.Value)).ToList();

            // Adding Claim Array
            foreach (var claim in selectedClaimsOnForm)
            {
                result = await UserManager.AddClaimAsync(user.Id, claim);
            }


            if (!result.Succeeded)
            {
                // Error occurs while adding roles
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError("", error);
                }

                viewModel.AllRolesList = new SelectList(
                    items: await RoleManager.Roles.ToListAsync(),
                    dataValueField: "Name",
                    dataTextField: "Name");

                viewModel.AllClaimsList = new SelectList(
                    items: ClaimsStore.AllClaims,
                    dataValueField: "value",
                    dataTextField: "type");

                return(View("CreateUserForm", viewModel));
            }


            ViewBag.Message = "Record(s) addded successfully.";
            return(List());
        }
Exemplo n.º 7
0
        public async Task <ActionResult> CreateUser(CreateUserFormViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                switch (viewModel.RoleId)
                {
                case "1":
                    var adminUser = new ApplicationUser()
                    {
                        UserName       = viewModel.Email,
                        Email          = viewModel.Email,
                        EmailConfirmed = true,
                        Admin          = new Admin()
                        {
                            FirstName = viewModel.FirstName,
                            LastName  = viewModel.LastName,
                            Email     = viewModel.Email,
                            Active    = viewModel.Active
                        }
                    };
                    var adminRole = new IdentityUserRole()
                    {
                        RoleId = viewModel.RoleId,
                        UserId = adminUser.Id
                    };
                    var adminResult = await UserManager.CreateAsync(adminUser);     // Create without password.

                    if (adminResult.Succeeded)
                    {
                        _context.Set <IdentityUserRole>().AddOrUpdate(adminRole);
                        _context.SaveChanges();
                        await SendActivationMail(adminUser);

                        TempData["AlertMessage"] = "User has been added";
                        return(RedirectToAction("CreateUser"));
                    }
                    foreach (var error in adminResult.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                    break;

                case "2":
                    var instructorUser = new ApplicationUser()
                    {
                        UserName       = viewModel.Email,
                        Email          = viewModel.Email,
                        EmailConfirmed = true,
                        Instructor     = new Instructor()
                        {
                            FirstName = viewModel.FirstName,
                            LastName  = viewModel.LastName,
                            Email     = viewModel.Email,
                            Active    = viewModel.Active
                        }
                    };
                    var instructorRole = new IdentityUserRole()
                    {
                        RoleId = viewModel.RoleId,
                        UserId = instructorUser.Id
                    };
                    var instructorResult = await UserManager.CreateAsync(instructorUser);     // Create without password.

                    if (instructorResult.Succeeded)
                    {
                        _context.Set <IdentityUserRole>().AddOrUpdate(instructorRole);
                        _context.SaveChanges();
                        await SendActivationMail(instructorUser);

                        TempData["AlertMessage"] = "User has been added";
                        return(RedirectToAction("CreateUser"));
                    }
                    foreach (var error in instructorResult.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                    break;

                case "3":
                    var studentUser = new ApplicationUser()
                    {
                        UserName       = viewModel.Email,
                        Email          = viewModel.Email,
                        EmailConfirmed = true,
                        Student        = new Student()
                        {
                            FirstName = viewModel.FirstName,
                            LastName  = viewModel.LastName,
                            Email     = viewModel.Email,
                            Active    = viewModel.Active
                        }
                    };
                    var studentRole = new IdentityUserRole()
                    {
                        RoleId = viewModel.RoleId,
                        UserId = studentUser.Id
                    };
                    var studentResult = await UserManager.CreateAsync(studentUser);     // Create without password.

                    if (studentResult.Succeeded)
                    {
                        _context.Set <IdentityUserRole>().AddOrUpdate(studentRole);
                        _context.SaveChanges();
                        await SendActivationMail(studentUser);

                        TempData["AlertMessage"] = "User has been added";
                        return(RedirectToAction("CreateUser"));
                    }
                    foreach (var error in studentResult.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                    break;
                }
            }
            return(View(viewModel));
        }