public async Task <ActionResult> DeleteRole(string id, EditUserRoleViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                // Fast exit if trying to modify user 'a' or role 'admin'
                if (viewModel.Username == "a" && viewModel.SelectedRole.ToUpper() == "ADMIN")
                {
                    ModelState.AddModelError(string.Empty, "User 'a' cannot be removed from Admin");
                    ViewData["AllRoles"] = new SelectList(_roleManager.Roles, "Name", "Name");
                    return(View(viewModel));
                }

                var roleToDelete = viewModel.SelectedRole;
                var user         = await _userManager.FindByNameAsync(viewModel.Username);

                var result = await _userManager.RemoveFromRoleAsync(user, roleToDelete);

                if (result.Succeeded)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    AddErrors(result);
                }
            }

            // If here, then error occured
            ViewData["AllRoles"] = new SelectList(_roleManager.Roles, "Name", "Name");
            return(View(viewModel));
        }
Esempio n. 2
0
        public async Task <IActionResult> EditRole(string id)
        {
            var role = await roleManager.FindByIdAsync(id);

            if (role == null)
            {
                ViewBag.ErrorMessage = $"Role with Id = {id} cannot be found.";
                return(View("NotFound"));
            }

            var model = new EditUserRoleViewModel
            {
                Id       = role.Id,
                RoleName = role.Name
            };

            foreach (var user in userManager.Users.ToList())
            {
                if (await userManager.IsInRoleAsync(user, role.Name))
                {
                    model.Users.Add(user.UserName);
                }
            }

            return(View(model));
        }
        public async Task <IActionResult> EditUser(string id)
        {
            var user = await userManager.FindByIdAsync(id);

            EditUserViewModel model = new EditUserViewModel
            {
                Id           = user.Id,
                Username     = user.UserName,
                Email        = user.Email,
                SecQuestion1 = user.SecurityQuestion1,
                SecQuestion2 = user.SecurityQuestion2
            };
            var roles         = roleManager.Roles.ToList();
            var rolesUserIsIn = await userManager.GetRolesAsync(user);

            var RoleList = new List <EditUserRoleViewModel>();

            for (int i = 0; i < roles.Count(); i++)
            {
                var vm = new EditUserRoleViewModel();
                vm.RoleName = roles[i].Name;
                if (rolesUserIsIn.Contains(roles[i].Name))
                {
                    vm.IsSelected = true;
                }
                else
                {
                    vm.IsSelected = false;
                }
                RoleList.Add(vm);
            }
            model.Roles = RoleList;

            return(View(model));
        }
Esempio n. 4
0
        public async Task <IActionResult> EditUserRole(string roleid)
        {
            var role = await roleManager.FindByIdAsync(roleid);

            if (role == null)
            {
                return(View("NotFound"));
            }
            List <EditUserRoleViewModel> model = new List <EditUserRoleViewModel>();

            foreach (var user in usermanager.Users.ToList())
            {
                var item = new EditUserRoleViewModel();
                item.UserName = user.UserName;

                if (await usermanager.IsInRoleAsync(user, role.Name))
                {
                    item.IsSelected = true;
                }
                else
                {
                    item.IsSelected = false;
                }

                model.Add(item);
            }
            ViewBag.RoleId = roleid;
            return(View(model));
        }
Esempio n. 5
0
        public async Task <ActionResult> Edit(string id)
        {
            _dbContext = HttpContext.GetOwinContext().Get <ApplicationDbContext>();
            var user = await(from u in _dbContext.Users
                             select new
            {
                UserId = u.Id,
                u.UserName,
                Roles = _dbContext.Roles.Where(r => u.Roles.Any(ur => ur.RoleId == r.Id)).Select(r => r.Name)
            }).SingleOrDefaultAsync(u => u.UserId == id);

            if (user == null)
            {
                return(HttpNotFound());
            }

            var roles = await _dbContext.Roles.ToListAsync();

            var viewModel = new EditUserRoleViewModel
            {
                UserId        = user.UserId,
                UserName      = user.UserName,
                SelectedRoles = user.Roles,
                Roles         = roles
            };

            return(View(viewModel));
        }
Esempio n. 6
0
        public async Task <IActionResult> EditRole(EditUserRoleViewModel model)
        {
            var role = await roleManager.FindByIdAsync(model.Id);

            if (role == null)
            {
                ViewBag.ErrorMessage = $"Role with Id = {model.Id} cannot be found.";
                return(View("NotFound"));
            }
            else
            {
                role.Name = model.RoleName;
                var result = await roleManager.UpdateAsync(role);

                if (result.Succeeded)
                {
                    return(RedirectToAction("ListRoles"));
                }

                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError("", error.Description);
                }

                return(View(model));
            }
        }
Esempio n. 7
0
        /// <summary>
        ///  edit account
        /// </summary>
        /// <param name="editUser">user model</param>
        /// <returns>true if create false otherwise</returns>
        public async Task <bool> Edit(EditUserRoleViewModel editUser)
        {
            try
            {
                var user = await _userManager.FindByIdAsync(editUser.Id);

                var userRole = await _userManager.GetRolesAsync(user);

                var result = await _userManager.RemoveFromRolesAsync(user, userRole);

                if (result.Succeeded)
                {
                    result = await _userManager.AddToRoleAsync(user, editUser.IsSuperAdmin? "SuperAdmin" : "ContentManager");

                    _logger.LogInformation(user.Email + " Was Edited by Super Admin");


                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 8
0
        public IActionResult Put(EditUserRoleViewModel userRoleViewModel)
        {
            try
            {
                var user = _userManager.FindByIdAsync(userRoleViewModel.UserId).Result;

                if (user == null)
                {
                    return(BadRequest($"UserId ({userRoleViewModel.UserId}) does not exists!"));
                }

                string oldRole = _userManager.GetRolesAsync(user).Result.FirstOrDefault();

                if (!string.IsNullOrEmpty(oldRole))
                {
                    _userManager.RemoveFromRoleAsync(user, oldRole).Wait();
                }

                _userManager.AddToRoleAsync(user, userRoleViewModel.Role).Wait();

                return(Ok());
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
Esempio n. 9
0
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var user = (from u in _context.CUsers
                        select new
            {
                UserId = u.Id,
                u.UserName,
                Roles = _context.CRoles.Where(r => r.CUsersRoles.Any(ur => ur.UserId == u.Id)).Select(r => r.RoleName).ToList()
            }).SingleOrDefault(u => u.UserId == id);

            if (user == null)
            {
                return(NotFound());
            }

            var roles = _context.CRoles.ToList();

            var viewModel = new EditUserRoleViewModel
            {
                UserId        = user.UserId,
                UserName      = user.UserName,
                SelectedRoles = user.Roles,
                Roles         = roles
            };

            return(View(viewModel));
        }
Esempio n. 10
0
        public ActionResult Edit(string userId)
        {
            var userRoles = _userRoleService.GetUserRole(userId);
            var roles     = _roleRepository.Find(x => x.IsActive && x.Id != "Admin");

            var viewModel = new EditUserRoleViewModel
            {
                Roles    = roles,
                UserRole = userRoles
            };

            return(View(viewModel));
        }
        // duplicated action EDIT POST/GET and changed to EditUserRoles
        // GET: ManageUsers/EditUserRoles/5
        public ActionResult EditUserRoles(string Id)
        {
            if (Id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            if (!UserRoleHelper.IsAdmin(User.Identity.GetUserId())) // check if current user has admin rights
            {
                return(RedirectToAction("AccessDenied", "Manage"));
            }
            ApplicationUser CurrUser = dbcontext.Users.Find(Id);

            if (CurrUser == null)
            {
                return(HttpNotFound());
            }

            EditUserRoleViewModel field = new EditUserRoleViewModel();    // get access to model fields we will be showing
            var userStore   = new UserStore <ApplicationUser>(dbcontext); // access to roles using Identity Framework
            var userManager = new UserManager <ApplicationUser>(userStore);

            // update db info with new data given by user in form View
            field.Id          = CurrUser.Id;
            field.UserName    = CurrUser.UserName;
            field.Email       = CurrUser.Email;
            field.Name        = CurrUser.Name;
            field.Surname     = CurrUser.Surname;
            field.Country     = CurrUser.Country;
            field.Town        = CurrUser.Town;
            field.Street      = CurrUser.Street;
            field.NumHouse    = CurrUser.NumHouse;
            field.NumFlat     = CurrUser.NumFlat;
            field.ZIPCode     = CurrUser.ZIPCode;
            field.PhoneNumber = CurrUser.PhoneNumber;

            if (UserRoleHelper.IsAdmin(field.Id))
            {
                field.RoleType = UserRoleTypes.Administrator;
            }
            if (UserRoleHelper.IsEmployee(field.Id))
            {
                field.RoleType = UserRoleTypes.Employee;
            }
            if (UserRoleHelper.IsUser(field.Id))
            {
                field.RoleType = UserRoleTypes.Customer;
            }

            return(View(field));
        }
Esempio n. 12
0
        public IActionResult Register()
        {
            RegisterViewModel model = new RegisterViewModel();
            var roles = roleManager.Roles;

            foreach (AppRole role in roles)
            {
                EditUserRoleViewModel vm = new EditUserRoleViewModel();
                vm.IsSelected = false;
                vm.RoleName   = role.Name;
                model.Roles.Add(vm);
            }
            return(View(model));
        }
Esempio n. 13
0
        public async Task DeleteUserRole(Guid userId, [FromForm] EditUserRoleViewModel model)
        {
            var command = new DeleteUserRoleCommand(
                userId,
                model.RoleIds
                );

            await _bus.SendCommand(command);

            if (_notifications.HasNotifications())
            {
                var errorMessage = _notifications.GetNotificationMessage();
                throw new GirvsException(StatusCodes.Status400BadRequest, errorMessage);
            }
        }
Esempio n. 14
0
        public async Task <IActionResult> Edit(string userId)
        {
            var user = await _userService.GetUserAsync(userId);

            var editUserRoleViewModel = new EditUserRoleViewModel();

            editUserRoleViewModel.UserId = user.Id;
            editUserRoleViewModel.Email  = user.Email;

            var roles = await _roleService.GetAllRoles();

            editUserRoleViewModel.Roles = roles;

            return(View("UserRoleEdit", editUserRoleViewModel));
        }
Esempio n. 15
0
        public async Task <ActionResult> Edit([Bind(Include = "UserName,Email,Id")] EditUserRoleViewModel editUser, params string[] selectedRole)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByIdAsync(editUser.Id);

                if (user == null)
                {
                    return(HttpNotFound());
                }
                //不允许修改用户名
                user.Email = editUser.Email;
                //更新用户信息
                var result = await _userManager.UpdateAsync(user);

                if (!result.Succeeded)
                {
                    ModelState.AddModelError("", result.Errors.First());
                    return(View());
                }
                //更新角色
                //删除现有角色
                //var userRoles = user.Roles.ToList();
                //userRoles.ForEach(t => _db.Set<IdentityUserRole>().Remove(t));

                // 清楚该用户的所有角色
                IList <string> roles = await _userManager.GetRolesAsync(user);

                foreach (string roleName in roles)
                {
                    await _userManager.RemoveFromRolesAsync(user.Id, roleName);
                }

                //添加所选角色
                selectedRole = selectedRole ?? new string[] { };
                foreach (string roleName in selectedRole)
                {
                    //var userRole = new IdentityUserRole { RoleId = roleId, UserId = user.Id };
                    //_db.Set<IdentityUserRole>().Add(userRole);
                    await _userManager.AddToRoleAsync(user.Id, roleName);
                }
                //_db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            ModelState.AddModelError("", "操作失败。");
            return(View());
        }
        public IActionResult CreateUser()
        {
            CreateUserViewModel model = new CreateUserViewModel();

            var roles    = roleManager.Roles.ToList();
            var RoleList = new List <EditUserRoleViewModel>();

            for (int i = 0; i < roles.Count(); i++)
            {
                var vm = new EditUserRoleViewModel();
                vm.RoleName   = roles[i].Name;
                vm.IsSelected = false;
                RoleList.Add(vm);
            }
            model.Roles = RoleList;

            return(View(model));
        }
        // GET: UserRoles/AddRole/5
        public async Task <ActionResult> AddRole(string id)
        {
            // Get user
            var user = await _userManager.FindByNameAsync(id);

            var usersRoles = await _userManager.GetRolesAsync(user);

            // Convert into a view model
            var viewModel = new EditUserRoleViewModel()
            {
                Username = user.UserName,
                Email    = user.Email,
                Roles    = usersRoles
            };

            ViewData["AllRoles"] = new SelectList(_roleManager.Roles, "Name", "Name");
            return(View(viewModel));
        }
Esempio n. 18
0
 public IActionResult Edit(EditUserRoleViewModel viewModel, int id)
 {
     if (ModelState.IsValid)
     {
         var user = _context.CUsers.Find(viewModel.UserId);
         _context.CUsersRoles.Where(r => r.UserId == viewModel.UserId).ToList().ForEach(r => _context.CUsersRoles.Remove(r));
         foreach (var roleId in viewModel.SelectedRoles)
         {
             int roleID = Convert.ToInt32(roleId);
             user.CUsersRoles.Add(new CUsersRoles()
             {
                 RoleId = roleID,
                 UserId = viewModel.UserId
             });
         }
         _context.SaveChanges();
         Success();
         return(RedirectToAction(nameof(Index)));
     }
     return(RedirectToAction("Edit", id));
 }
Esempio n. 19
0
        public async Task <IActionResult> Edit(EditUserRoleViewModel editUser)
        {
            var isEdited = await _userManagment.Edit(editUser);

            if (isEdited)
            {
                if (!editUser.IsSuperAdmin)
                {
                    AddDefaultConfig(editUser.Id);
                }
                _toastNotification.AddSuccessToastMessage(editUser.Email + " Edited Successfully");
                _eventLogger.LogInfoEvent(HttpContext.User.Identity.Name, Common.ActivityEnum.Update, "Super Admin > User Managment > Edit", editUser.Email + " Edited Successfully");
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                _toastNotification.AddErrorToastMessage("There is Error in Delete " + editUser.Email);
                _logger.LogError("There is Error in Delete " + editUser.Email);
                return(View());
            }
        }
Esempio n. 20
0
        public async Task <IActionResult> EditUsersInRole(string roleId, string msg)
        {
            ViewBag.roleId = roleId;
            if (msg != null && msg.Equals("rlinuse"))
            {
                ViewBag.ErrorMessage = $"UserName is already added to this role";
            }
            else if (msg != null && msg.Equals("ntblnk"))
            {
                ViewBag.ErrorMessage = $"UserName is Required";
            }


            var role = await roleManager.FindByIdAsync(roleId);

            if (role == null)
            {
                ViewBag.ErrorMessage = $"Role with Id = {roleId} cannot be found";
                return(View("NotFound"));
            }


            var model = new EditUserRoleViewModel();

            foreach (var user in userManager.Users)
            {
                var userRoleViewModel = new UserRoleViewModel
                {
                    UserId   = user.Id,
                    UserName = user.UserName
                };

                if (await userManager.IsInRoleAsync(user, role.Name))
                {
                    model.Users.Add(userRoleViewModel);
                }
            }

            return(View(model));
        }
Esempio n. 21
0
        public async Task <ActionResult> Edit(EditUserRoleViewModel viewModel)
        {
            _dbContext = HttpContext.GetOwinContext().Get <ApplicationDbContext>();
            if (!ModelState.IsValid)
            {
                viewModel.Roles = await _dbContext.Roles.ToListAsync();

                return(View(viewModel));
            }

            var user = _dbContext.Users.Find(viewModel.UserId);

            user.Roles.Clear();
            foreach (var roleId in viewModel.SelectedRoles)
            {
                user.Roles.Add(new IdentityUserRole {
                    RoleId = roleId
                });
            }
            await _dbContext.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> AddRole(string id, EditUserRoleViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                var roleToAdd = viewModel.SelectedRole;
                var user      = await _userManager.FindByNameAsync(id);

                var result = await _userManager.AddToRoleAsync(user, roleToAdd);

                if (result.Succeeded)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    AddErrors(result);
                }
            }

            // If here, then error occured
            ViewData["AllRoles"] = new SelectList(_roleManager.Roles, "Name", "Name");
            return(View(viewModel));
        }
Esempio n. 23
0
        public async Task <IActionResult> Edit(string id)
        {
            var user = await _userManager.FindByIdAsync(id);

            EditUserRoleViewModel dto = new EditUserRoleViewModel();

            if (id == null || user == null)
            {
                return(StatusCode(404));
            }
            else
            {
                ViewBag.Roles    = _roleManager.Roles.Select(x => x.Name).ToList();
                dto.Email        = user.Email;
                dto.Id           = user.Id;
                dto.IsSuperAdmin = await _userManager.IsInRoleAsync(user, UserRolesConst.SuperAdmin);

                dto.IsFirstLogin     = user.isFirstLogin;
                dto.TwoFactorEnabled = user.TwoFactorEnabled;
                dto.EmailConfirmed   = user.EmailConfirmed;
            }
            return(View(dto));
        }
Esempio n. 24
0
        public ActionResult Edit(EditUserRoleViewModel viewModel)
        {
            var selectedRoles = viewModel.CheckedRoles != null
                                ? viewModel.CheckedRoles.Split(',').Select(x => x.ToString())
                                : new List <string>();

            //check first if user have roles
            if (!selectedRoles.Any())
            {
                ModelState.AddModelError("", "No selected role");
                var roles     = _roleRepository.Find(x => x.IsActive && x.Id != "Admin");
                var userRoles = _userRoleService.GetUserRole(viewModel.UserRole.Id);

                viewModel.Roles    = roles;
                viewModel.UserRole = userRoles;
                return(View(viewModel));
            }

            //update user
            var user = _userRepository.GetById(viewModel.UserRole.Id);

            _userRepository.Update(user);
            user.FirstName    = viewModel.UserRole.FirstName;
            user.LastName     = viewModel.UserRole.LastName;
            user.PasswordHash = UserManager.PasswordHasher.HashPassword(viewModel.Password);
            user.UserName     = viewModel.UserRole.UserName;

            //update roles
            _userRoleRepository.UpdateUserRole(viewModel.UserRole.Id, selectedRoles);

            _unitOfWork.Commit();

            _logger.Info(Payroll.Resources.LoggerMessages.INFO_ACCOUNT_UPDATE, user.Id, User.Identity.GetUserId());
            _logger.Info(Payroll.Resources.LoggerMessages.INFO_ACCOUNT_UPDATE_ROLE, user.Id, String.Join(",", selectedRoles), User.Identity.GetUserId());
            return(RedirectToAction("Index"));
        }
        // all fields will be used so instead of Bind we can use just the ready Model for it
        public ActionResult EditUserRoles(EditUserRoleViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (!UserRoleHelper.IsAdmin(User.Identity.GetUserId())) // check if current user has admin rights
                {
                    return(RedirectToAction("AccessDenied", "Manage"));
                }

                ApplicationUser CurrUser = dbcontext.Users.Find(model.Id);
                if (CurrUser == null || model.Id == null)
                {
                    return(HttpNotFound());
                }

                // user cannot change his own role. Check if user currently editing has same id as the one being edited
                if (model.Id == User.Identity.GetUserId())
                {
                    return(RedirectToAction("Index", new { Message = ManageMessageId.ChangeOwnRoleErr }));
                }

                // declaration of needed variables to have the ability to change user roles : Identity Framework. Takes role types and users we will be later using from DB
                var userStore   = new UserStore <ApplicationUser>(dbcontext);
                var userManager = new UserManager <ApplicationUser>(userStore);


                // change user role to Administrator
                if (model.RoleType == UserRoleTypes.Administrator)
                {
                    if (userManager.IsInRole(CurrUser.Id, "User"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "User");
                    }
                    if (userManager.IsInRole(CurrUser.Id, "Employee"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "Employee");
                    }
                    userManager.AddToRole(CurrUser.Id, "Administrator");
                    dbcontext.Entry(CurrUser).State = System.Data.Entity.EntityState.Modified;
                    dbcontext.SaveChanges();

                    return(RedirectToAction("Index", new { Message = ManageMessageId.ChangeRoleToAdmin }));
                }

                // change user role to Employee
                if (model.RoleType == UserRoleTypes.Employee)
                {
                    if (userManager.IsInRole(CurrUser.Id, "User"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "User");
                    }
                    if (userManager.IsInRole(CurrUser.Id, "Administrator"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "Administrator");
                    }
                    userManager.AddToRole(CurrUser.Id, "Employee");
                    dbcontext.Entry(CurrUser).State = System.Data.Entity.EntityState.Modified;
                    dbcontext.SaveChanges();

                    return(RedirectToAction("Index", new { Message = ManageMessageId.ChangeRoleToEmployee }));
                }

                // change user role to Customer\User
                if (model.RoleType == UserRoleTypes.Customer)
                {
                    if (userManager.IsInRole(CurrUser.Id, "Employee"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "Employee");
                    }
                    if (userManager.IsInRole(CurrUser.Id, "Administrator"))
                    {
                        userManager.RemoveFromRole(CurrUser.Id, "Administrator");
                    }
                    userManager.AddToRole(CurrUser.Id, "User");
                    dbcontext.Entry(CurrUser).State = System.Data.Entity.EntityState.Modified;
                    dbcontext.SaveChanges();

                    return(RedirectToAction("Index", new { Message = ManageMessageId.ChangeRoleToCustomer }));
                }

                return(RedirectToAction("Index", new { Message = ManageMessageId.Error }));
            }

            return(View(model));
        }
Esempio n. 26
0
        public ActionResult EditRole(string userId)
        {
            EditUserRoleViewModel model = this.service.GetUserRoles(userId);

            return(this.View(model));
        }
Esempio n. 27
0
        public override async Task <IDisplayResult> UpdateAsync(User user, UpdateEditorContext context)
        {
            var model = new EditUserRoleViewModel();

            // The current user cannot alter their own roles. This prevents them removing access to the site for themselves.
            if (String.Equals(_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier), user.UserId, StringComparison.OrdinalIgnoreCase))
            {
                return(Edit(user));
            }

            if (await context.Updater.TryUpdateModelAsync(model, Prefix))
            {
                // Authorize each role in the model to prevent html injection.
                var authorizedRoleNames = await GetAuthorizedRoleNamesAsync(model.Roles.Select(x => x.Role));

                var userRoleNames = await _userRoleStore.GetRolesAsync(user, default(CancellationToken));

                var authorizedSelectedRoleNames = await GetAuthorizedRoleNamesAsync(model.Roles.Where(x => x.IsSelected).Select(x => x.Role));

                if (context.IsNew)
                {
                    // Only add authorized new roles.
                    foreach (var role in authorizedSelectedRoleNames)
                    {
                        await _userRoleStore.AddToRoleAsync(user, _userManager.NormalizeName(role), default(CancellationToken));
                    }
                }
                else
                {
                    // Remove roles in two steps to prevent an iteration on a modified collection
                    var rolesToRemove = new List <string>();
                    foreach (var role in userRoleNames)
                    {
                        // When the user has permission to manage the role and it is no longer selected the role can be removed.
                        if (authorizedRoleNames.Contains(role, StringComparer.OrdinalIgnoreCase) && !authorizedSelectedRoleNames.Contains(role, StringComparer.OrdinalIgnoreCase))
                        {
                            rolesToRemove.Add(role);
                        }
                    }
                    foreach (var role in rolesToRemove)
                    {
                        if (String.Equals(role, AdministratorRole, StringComparison.OrdinalIgnoreCase))
                        {
                            var usersOfAdminRole = (await _userManager.GetUsersInRoleAsync(AdministratorRole)).Cast <User>();
                            // Make sure we always have at least one administrator account
                            if (usersOfAdminRole.Count() == 1 && String.Equals(user.UserId, usersOfAdminRole.First().UserId, StringComparison.OrdinalIgnoreCase))
                            {
                                _notifier.Warning(H["Cannot remove administrator role from the only administrator."]);
                                continue;
                            }
                            else
                            {
                                await _userRoleStore.RemoveFromRoleAsync(user, _userManager.NormalizeName(role), default(CancellationToken));
                            }
                        }
                        else
                        {
                            await _userRoleStore.RemoveFromRoleAsync(user, _userManager.NormalizeName(role), default(CancellationToken));
                        }
                    }

                    // Add new roles
                    foreach (var role in authorizedSelectedRoleNames)
                    {
                        if (!await _userRoleStore.IsInRoleAsync(user, _userManager.NormalizeName(role), default(CancellationToken)))
                        {
                            await _userRoleStore.AddToRoleAsync(user, _userManager.NormalizeName(role), default(CancellationToken));
                        }
                    }
                }
            }

            return(Edit(user));
        }
Esempio n. 28
0
        public async Task <IActionResult> EditUsersInRole(EditUserRoleViewModel model, string roleId, string task)
        {
            var role = await roleManager.FindByIdAsync(roleId);

            if (role == null)
            {
                ViewBag.ErrorMessage = $"Role with Id = {roleId} cannot be found";
                return(View("NotFound"));
            }

            if (task.Equals("Add"))
            {
                if (model.UserName == null)
                {
                    ModelState.AddModelError(string.Empty, "UserName Required");
                    return(RedirectToAction("EditUsersInRole", new { roleId = roleId, msg = "ntblnk" }));
                }
                var user = await userManager.FindByEmailAsync(model.UserName);

                IdentityResult result = null;
                if (user == null)
                {
                    ViewBag.ErrorMessage = $"Role with Id = {model.UserName} cannot be found";
                    return(View("NotFound"));
                }

                if (!(await userManager.IsInRoleAsync(user, role.Name)))
                {
                    result = await userManager.AddToRoleAsync(user, role.Name);

                    if (result.Succeeded)
                    {
                        return(RedirectToAction("EditRole", new { Id = roleId }));
                    }
                }
                else
                {
                    return(RedirectToAction("EditUsersInRole", new { roleId = roleId, msg = "rlinuse" }));
                }
            }
            else if (task.Equals("Remove"))
            {
                for (int i = 0; i < model.Users.Count; i++)
                {
                    var user = await userManager.FindByIdAsync(model.Users[i].UserId);

                    IdentityResult result = null;

                    if (model.Users[i].IsSelected && await userManager.IsInRoleAsync(user, role.Name))
                    {
                        result = await userManager.RemoveFromRoleAsync(user, role.Name);
                    }
                    else
                    {
                        continue;
                    }

                    if (result.Succeeded)
                    {
                        if (i < (model.Users.Count - 1))
                        {
                            continue;
                        }
                        else
                        {
                            return(RedirectToAction("EditRole", new { Id = roleId }));
                        }
                    }
                }
            }

            return(RedirectToAction("EditRole", new { Id = roleId }));
        }