public RoleUpdateViewDetails GetRoleDetailsUpdate(string roleId)
        {
            roleId = _encryptionService.DecryptString(roleId);
            var roleDetails = _roleManagementRepository.GetRoleDetailsUpdate(roleId, StoredProcedureName);
            var roleLists   = roleDetails.Item1;
            var roleGroup   = roleLists.GroupBy(x => x.SubGroupName).Select(g => g.First()).ToList();
            List <RoleDetailsLists> roleDetailsLists = new List <RoleDetailsLists>();

            foreach (var group in roleGroup)
            {
                RoleDetailsLists roleDetailsList = new RoleDetailsLists();
                roleDetailsList.GroupName    = group.Group;
                roleDetailsList.SubGroupName = group.SubGroupName;
                roleDetailsList.RoleDetails  = roleLists.Where(x => x.SubGroupName == group.SubGroupName).ToList();
                roleDetailsLists.Add(roleDetailsList);
            }
            RoleUpdateViewDetails roleUpdateViewDetails = new RoleUpdateViewDetails();

            roleUpdateViewDetails.RoleLists     = roleDetailsLists;
            roleUpdateViewDetails.SelectedRoles = roleDetails.Item2;
            roleUpdateViewDetails.RoleId        = roleDetails.Item3.Id;
            roleUpdateViewDetails.RoleName      = roleDetails.Item3.Name;
            return(roleUpdateViewDetails);
        }
        public async Task <IActionResult> EditRoles(RoleUpdateViewDetails roleUpdateViewDetails)
        {
            if (ModelState.IsValid)
            {
                //get all role lists firs
                var roleManager = _serviceProvider.GetRequiredService <RoleManager <IdentityRole> >();
                var roleLists   = Request.Form["eachRoleValue"].ToList();

                var roleExist = await roleManager.RoleExistsAsync(roleUpdateViewDetails.RoleName);

                if (roleExist)
                {
                    try
                    {
                        //get claims assoc with role
                        var roleDetails = await roleManager.FindByIdAsync(roleUpdateViewDetails.RoleId);

                        //claims list assoc with roles above mentioned
                        var roles = await roleManager.GetClaimsAsync(roleDetails);

                        var currentRoles = new List <string>();
                        foreach (var role in roles)
                        {
                            currentRoles.Add(role.Value);
                        }

                        var deletedRoles = currentRoles.Except(roleLists).ToList();
                        foreach (var deleteRole in deletedRoles)
                        {
                            await roleManager.RemoveClaimAsync(roleDetails, new Claim("permission", deleteRole));
                        }

                        if (!roleLists.Contains("dashboard.view"))
                        {
                            roleLists.Add("dashboard.view");
                        }
                        foreach (var roleClaim in roleLists)
                        {
                            if (roleDetails != null)
                            {
                                var role = Convert.ToString(roles.FirstOrDefault(x => x.Value == roleClaim));
                                if (role == "" || roleClaim == "dashboard.view")
                                {
                                    await roleManager.AddClaimAsync(roleDetails, new Claim("permission", roleClaim));
                                }
                            }
                            else
                            {
                                return(RedirectToAction("EditRole")
                                       .WithDanger("Failed", "No role exists with the role name."));
                            }
                        }

                        return(RedirectToAction("Index").WithSuccess("Success", "Roles updated successfully."));
                    }
                    catch (Exception e)
                    {
                        return(RedirectToAction("EditRole").WithDanger("Failed", e.Message));
                    }
                }

                return(RedirectToAction("EditRole").WithDanger("Failed", "No role exists with the role name."));
            }

            return(RedirectToAction("EditRole").WithDanger("Failed", "Failed Validation"));
        }