Esempio n. 1
0
        public ActionResult Add(UserAccountView userAccountView, FormCollection form)
        {
            IUsersRepository usersRepository = new UsersRepository(db);

            if (userAccountView.Username != null)
            {
                if (usersRepository.GetUserByUsername(userAccountView.Username) != null)
                {
                    ModelState.AddModelError("Username", "Korisničko ime već postoji.");
                }
            }

            if (userAccountView.Email != null)
            {
                if (usersRepository.GetUserByEmail(userAccountView.Email) != null)
                {
                    ModelState.AddModelError("Email", "E-mail već postoji.");
                }
            }

            if (ModelState.IsValid)
            {
                string sessionToken = Audit.GenerateNewSessionToken();

                User user = new User();

                userAccountView.RegistrationDate = DateTime.Now;

                PBKDF2 pbkdf2 = new PBKDF2(userAccountView.Password);

                var passwordBytes = pbkdf2.ComputePBKDF2();

                userAccountView.Password = Convert.ToBase64String(passwordBytes);
                userAccountView.Salt     = Convert.ToBase64String(pbkdf2.SaltBytes);

                string[] rolesSelectedValues = new string[100];
                if (form["RolePK"] != null)
                {
                    rolesSelectedValues = ((string)form["RolePK"]).Split(',');
                }

                userAccountView.ConvertTo(userAccountView, user);

                usersRepository.Add(user);
                usersRepository.SaveChanges(sessionToken);

                // Delete old roles
                IUsersInRolesRepository usersInRolesRepository = new UsersInRolesRepository(db);
                usersInRolesRepository.Delete(uir => uir.UserFK == user.UserPK);

                // Add New Roles
                foreach (string role in rolesSelectedValues)
                {
                    UserInRole tmpUserInRole = new UserInRole();

                    tmpUserInRole.UserFK = user.UserPK;
                    tmpUserInRole.RoleFK = Convert.ToInt32(role);

                    usersInRolesRepository.Add(tmpUserInRole);
                }

                usersInRolesRepository.SaveChanges(sessionToken);

                TempData["message"] = LayoutHelper.GetMessage("INSERT", user.UserPK);

                return(RedirectToAction("Index", "User"));
            }
            else
            {
                string[] rolesSelectedValues = new string[100];
                if (form["RolePK"] != null)
                {
                    rolesSelectedValues = ((string)form["RolePK"]).Split(',');
                }

                IRolesRepository rolesRepository = new RolesRepository(db);

                userAccountView.Roles = new MultiSelectList(rolesRepository.GetActiveRoles(), "RolePK", "Name", rolesSelectedValues);

                return(View(userAccountView));
            }
        }