public IActionResult AddRole()
        {
            _log.Information("Add Role Page Initiated And Get Role Lists");
            var roleDetailLists = _roleManagementBusiness.GetAvailableRoleLists();

            _log.Information("Role Details Get As {0}", JsonConvert.SerializeObject(roleDetailLists));
            var viewModelRoleDetailsLists = new ViewModelRoleDetailsLists();

            viewModelRoleDetailsLists.RoleLists = roleDetailLists;
            return(View(viewModelRoleDetailsLists));
        }
        public async Task <IActionResult> AddRole(ViewModelRoleDetailsLists viewModelRoleDetailsLists)
        {
            _log.Information("Add Role Group With Parameters {0}",
                             JsonConvert.SerializeObject(viewModelRoleDetailsLists));
            if (ModelState.IsValid)
            {
                viewModelRoleDetailsLists.RoleName = viewModelRoleDetailsLists.RoleName.ToUpper();
                var roleManager = _serviceProvider.GetRequiredService <RoleManager <IdentityRole> >();
                _log.Information("Get All Roles To Check If Role Group Present {0}",
                                 JsonConvert.SerializeObject(roleManager));
                var roleLists = Request.Form["eachRoleValue"].ToList();
                if (!roleLists.Contains("dashboard.view"))
                {
                    roleLists.Add("dashboard.view");
                }
                var roleExist = await roleManager.RoleExistsAsync(viewModelRoleDetailsLists.RoleName);

                if (!roleExist)
                {
                    try
                    {
                        await roleManager.CreateAsync(new IdentityRole(viewModelRoleDetailsLists.RoleName));

                        _log.Information("Role Add Success Now Inserting Claims");
                        foreach (var roleClaim in roleLists)
                        {
                            //get claims assoc with role
                            var roleDetails = await roleManager.FindByNameAsync(viewModelRoleDetailsLists.RoleName);

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

                            if (roleDetails != null)
                            {
                                var role = Convert.ToString(roles.FirstOrDefault(x => x.Value == roleClaim));
                                if (role == "")
                                {
                                    await roleManager.AddClaimAsync(roleDetails, new Claim("permission", roleClaim));
                                }
                            }
                        }

                        _log.Information("Role Add Success | Claim Add Success");
                        return(RedirectToAction("Index").WithSuccess("Success", "Roles added successfully."));
                    }
                    catch (Exception e)
                    {
                        _log.Information("Exception Occured While Inserting Role With Message {0}", e.Message);
                        return(RedirectToAction("AddRole").WithDanger("Failed", e.Message));
                    }
                }
                else
                {
                    _log.Information("Add Role Failed The role name already exists. Please use any other role name.");
                    return(RedirectToAction("AddRole").WithAlertMessage("111",
                                                                        "The role name already exists. Please use any other role name."));
                }
            }

            _log.Information("Add Role Failed Failed Validation.");
            return(RedirectToAction("AddRole").WithDanger("Failed", "Failed Validation"));
        }