public static List <PermissionsForRoleDTO> GetPermissionsByRoleID(int roleID) { var data = new List <PermissionsForRoleDTO>(); var permissionsForRoleDTO = new PermissionsForRoleDTO(); using (SqlConnection con = new SqlConnection(Helper.Connection())) { using (SqlCommand cmd = new SqlCommand("GetPermissionsByRoleID", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@RoleID", roleID); con.Open(); /* Create instance of DataAdapter to read multiple DataSet */ var da = new SqlDataAdapter(cmd); var ds = new DataSet(); da.Fill(ds); /* reading multiple DataSet */ foreach (DataRow item in ds.Tables[0].Rows) { permissionsForRoleDTO.RoleID = item["RoleID"] == DBNull.Value ? 0 : Convert.ToInt32(item["RoleID"]); permissionsForRoleDTO.RoleName = item["RoleName"] == DBNull.Value ? "" : Convert.ToString(item["RoleName"]); permissionsForRoleDTO.RoleDescription = item["RoleDescription"] == DBNull.Value ? "" : Convert.ToString(item["RoleDescription"]); foreach (DataRow permissionItem in ds.Tables[1].Rows) { permissionsForRoleDTO.PermissionsWithIsAssigned.Add(new PermissionWithIsAssigned() { ID = permissionItem["ID"] == DBNull.Value ? 0 : Convert.ToInt32(permissionItem["ID"]), Name = permissionItem["Name"] == DBNull.Value ? "" : Convert.ToString(permissionItem["Name"]), Description = permissionItem["Description"] == DBNull.Value ? "" : Convert.ToString(permissionItem["Description"]), IsAssigned = permissionItem["IsAssigned"] == DBNull.Value ? false : Convert.ToBoolean(permissionItem["IsAssigned"]) }); } data.Add(permissionsForRoleDTO); } } } return(data); }
public async Task <IActionResult> EditPermissionsOfRole(PermissionsForRoleDTO model) { var roleManager = _serviceProvider.GetRequiredService <RoleManager <ApplicationRole> >(); var rolePermissions = new List <AssignPermissionsToRole>(); var permissionIDs = new List <string>(); foreach (var permission in model.PermissionsWithIsAssigned) { if (permission.IsAssigned) { permissionIDs.Add(permission.ID.ToString()); } } var permissionIDsToString = string.Join(",", permissionIDs); var modelToList = new List <PermissionsForRoleDTO> { model }; rolePermissions = modelToList.GroupBy(x => new { x.RoleID }).Select(y => new AssignPermissionsToRole { RoleID = y.Key.RoleID, PermissionIDs = permissionIDsToString }).ToList(); AdminRepository.AssignPermissionsToRole(rolePermissions); // Get all permissions affected by rights change var rightsHavingPermissions = AdminRepository.GetRightsHavingPermissions(permissionIDsToString); var rightIDsList = new List <string>(); var applicationRoleItem = new ApplicationRole(model.RoleName, model.RoleID); foreach (var item in rightsHavingPermissions) { rightIDsList.Add(item.ID.ToString()); } // Get all RightIDs var allRightIDs = AdminRepository.GetAllRightIDs(); // Get Application Role var applicationRole = roleManager.FindByNameAsync(model.RoleName).Result; // modify identity table aspnetroleclaims foreach (var rightID in allRightIDs) { if (rightIDsList.Contains(rightID)) { await roleManager.AddClaimAsync(applicationRole, new Claim(AdminRepository.GetRightNameByRightID(int.Parse(rightID)), "True")); } else { await roleManager.RemoveClaimAsync(applicationRole, new Claim(AdminRepository.GetRightNameByRightID(int.Parse(rightID)), "True")); } } await HttpContext.RefreshLoginAsync(); return(RedirectToAction("Index")); }