public async Task <IActionResult> ManageClaims(UserCliamsViewModel model)
        {
            var user = await Usermanager.FindByIdAsync(model.userId);

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

            // Get all the user existing claims and delete them
            var claims = await Usermanager.GetClaimsAsync(user);

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

            if (!result.Succeeded)
            {
                ModelState.AddModelError("", "Cannot remove user existing claims");
                return(View(model));
            }

            // Add all the claims that are selected on the UI

            result = await Usermanager.AddClaimsAsync(user,
                                                      model.Claims.Select(c => new Claim(c.ClaimType, c.IsSelected ? "true" : "false")));

            if (!result.Succeeded)
            {
                ModelState.AddModelError("", "Cannot add selected claims to user");
                return(View(model));
            }

            return(RedirectToAction("EditUser", new { id = model.userId }));
        }
        public async Task <IActionResult> ManageClaims(string userId)
        {
            var user = await Usermanager.FindByIdAsync(userId);

            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {userId} cannot be found";
                return(View("NotFound"));
            }
            var model = new UserCliamsViewModel()
            {
                userId = userId
            };
            var existingUserClaims = await Usermanager.GetClaimsAsync(user);

            foreach (Claim claim in ClaimStore.claimstore)
            {
                UserClaims userclaim = new UserClaims()
                {
                    ClaimType = claim.Type,
                    Value     = claim.Value
                };
                // If the user has the claim, set IsSelected property to true, so the checkbox
                // next to the claim is checked on the UI
                if (existingUserClaims.Any(c => c.Type == claim.Type && c.Value == "true"))
                {
                    userclaim.IsSelected = true;
                }
                model.Claims.Add(userclaim);
            }

            return(View(model));
        }
        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> GetUserById(string id)
        {
            var user = await Usermanager.FindByIdAsync(id);

            if (user != null)
            {
                RegisterEmployeeViewModel r = new RegisterEmployeeViewModel()
                {
                    id           = user.Id,
                    FullName     = user.FullName,
                    Email        = user.Email,
                    City         = util.getCities().FirstOrDefault(x => x.id == user.City).city,
                    PhoneNumber  = user.PhoneNumber,
                    Photopath    = user.Photopath,
                    StreetAdress = user.StreetAdress,
                };
                if (user.store_id != null)
                {
                    r.store_id = (int)user.store_id;
                }
                if (User.IsInRole("Super Admin") || User.IsInRole("Admin"))
                {
                    var userClaims = await Usermanager.GetClaimsAsync(user);

                    var userRoles = await Usermanager.GetRolesAsync(user);

                    if (user.store_id != null)
                    {
                        r.StoreName = util.GetAllStores().FirstOrDefault(x => x.store_id == user.store_id).StoreName;
                    }
                    r.addedBy = user.addedBy;
                    foreach (var claim in userClaims)
                    {
                        UserClaim u = new UserClaim()
                        {
                            ClaimType  = claim.Type,
                            ClaimValue = claim.Value
                        };
                        r.Claims.Add(u);
                    }
                    foreach (var role in userRoles)
                    {
                        UserRoles ro = new UserRoles()
                        {
                            RoleName = role
                        };
                        r.Roles.Add(ro);
                    }
                }
                return(View("~/Views/Home/Profile.cshtml", r));
            }
            //not Found
            ViewBag.Name = "User";
            return(View("ProductNotFound", id));
        }
        public async Task <IActionResult> EditUser(string id)
        {
            var user = await Usermanager.FindByIdAsync(id);

            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {id} cannot be found";
                return(View("NotFound"));
            }
            if (User.IsInRole("Admin"))
            {
                var LoginUser = await Usermanager.GetUserAsync(User);

                if (!User.HasClaim("Edit User", "true") && LoginUser.Id != id)
                {
                    return(Forbid());
                }
            }
            ViewBag.Stores = util.GetAllStores();
            // GetClaimsAsync retunrs the list of user Claims
            var userClaims = await Usermanager.GetClaimsAsync(user);

            // GetRolesAsync returns the list of user Roles
            var userRoles = await Usermanager.GetRolesAsync(user);

            var model = new EditUserViewModel
            {
                Id                = user.Id,
                Email             = user.Email,
                FullName          = user.FullName,
                cityId            = user.City,
                PhoneNumber       = user.PhoneNumber,
                StreetAdress      = user.StreetAdress,
                store_id          = user.store_id,
                Existingphotopath = user.Photopath,
                Claims            = userClaims.Select(c => c.Type + ":" + c.Value).ToList(),
                Roles             = userRoles
            };

            ViewBag.cities = util.getCities();
            return(View(model));
        }