public async Task <IActionResult> DeleteUser(string id)
        {
            var user = await Usermanager.FindByIdAsync(id);

            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {id} cannot be found";
                return(View("NotFound"));
            }
            else
            {
                if (await Usermanager.IsInRoleAsync(user, "Admin") || await Usermanager.IsInRoleAsync(user, "Employee"))
                {
                    var claims = await Usermanager.GetClaimsAsync(user);

                    var claimResult = await Usermanager.RemoveClaimsAsync(user, claims);

                    if (!claimResult.Succeeded)
                    {
                        ModelState.AddModelError("", "Cannot remove user existing claims");
                        return(View("ListUsers"));
                    }
                    var roles = await Usermanager.GetRolesAsync(user);

                    var RolesResult = await Usermanager.RemoveFromRolesAsync(user, roles);

                    if (!RolesResult.Succeeded)
                    {
                        ModelState.AddModelError("", "Cannot remove user existing roles");
                        return(View("ListUsers"));
                    }

                    user.isactive = false;
                    var result1 = await Usermanager.UpdateAsync(user);

                    if (result1.Succeeded)
                    {
                        return(RedirectToAction("ListUsers"));
                    }
                    foreach (var error in result1.Errors)
                    {
                        ModelState.AddModelError("", error.Description);
                    }
                    return(View("ListUsers"));
                }
                var result = await Usermanager.DeleteAsync(user);

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

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

                return(View("ListUsers"));
            }
        }
        public async Task <IActionResult> EditRole(string id)
        {
            // Find the role by Role 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 EditRoleViewModel
            {
                Id       = role.Id,
                RoleName = role.Name
            };

            // Retrieve all the Users
            foreach (var user in Usermanager.Users)
            {
                // If the user is in this role, add the username to
                // Users property of EditRoleViewModel. This model
                // object is then passed to the view for display
                if (await Usermanager.IsInRoleAsync(user, role.Name))
                {
                    model.Users.Add(user.UserName);
                }
            }

            return(View(model));
        }
        public async Task <IActionResult> EditUsersInRole(List <UserRoleViewModel> model, string roleId)
        {
            var role = await Rolemanager.FindByIdAsync(roleId);

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

            for (int i = 0; i < model.Count; i++)
            {
                var user = await Usermanager.FindByIdAsync(model[i].UserId);

                IdentityResult result = null;


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

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

            return(RedirectToAction("EditRole", new { Id = roleId }));
        }
        public async Task <IActionResult> ManageRoles(string userId)
        {
            ViewBag.userId = userId;
            string loggedInAdminId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;

            var user = await Usermanager.FindByIdAsync(userId);

            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {userId} cannot be found";
                return(View("NotFound"));
            }

            var model = new List <UserRoles>();

            foreach (var role in Rolemanager.Roles)
            {
                if (User.IsInRole("Super Admin") || User.IsInRole("Admin") && role.Name != "Admin" && role.Name != "Super Admin")
                {
                    var Eachuserviewmodel = new UserRoles
                    {
                        RoleId   = role.Id,
                        RoleName = role.Name
                    };

                    if (await Usermanager.IsInRoleAsync(user, role.Name))
                    {
                        Eachuserviewmodel.isSelected = true;
                    }
                    else
                    {
                        Eachuserviewmodel.isSelected = false;
                    }

                    model.Add(Eachuserviewmodel);
                }
            }

            return(View(model));
        }
        public async Task <IActionResult> EditUsersInRole(string roleId)
        {
            ViewBag.roleId = roleId;

            var role = await Rolemanager.FindByIdAsync(roleId);

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

            var model = new List <UserRoleViewModel>();

            foreach (var user in Usermanager.Users)
            {
                if (User.IsInRole("Super Admin") || User.IsInRole("Admin") && !(await Usermanager.IsInRoleAsync(user, "Admin") || await Usermanager.IsInRoleAsync(user, "Super Admin")))
                {
                    var userRoleViewModel = new UserRoleViewModel
                    {
                        UserId   = user.Id,
                        UserName = user.UserName
                    };

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

                    model.Add(userRoleViewModel);
                }
            }

            return(View(model));
        }