public static List <RightsForPermissionDTO> GetRightsByPermissionID(int permissionID) { var data = new List <RightsForPermissionDTO>(); var rightsForPermissionDTO = new RightsForPermissionDTO(); using (SqlConnection con = new SqlConnection(Helper.Connection())) { using (SqlCommand cmd = new SqlCommand("GetRightsByPermissionID", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@PermissionID", permissionID); 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) { rightsForPermissionDTO.PermissionID = item["PermissionID"] == DBNull.Value ? 0 : Convert.ToInt32(item["PermissionID"]); rightsForPermissionDTO.PermissionName = item["PermissionName"] == DBNull.Value ? "" : Convert.ToString(item["PermissionName"]); rightsForPermissionDTO.PermissionDescription = item["PermissionDescription"] == DBNull.Value ? "" : Convert.ToString(item["PermissionDescription"]); foreach (DataRow rightItem in ds.Tables[1].Rows) { rightsForPermissionDTO.RightsWithIsAssigned.Add(new RightWithIsAssigned() { ID = rightItem["ID"] == DBNull.Value ? 0 : Convert.ToInt32(rightItem["ID"]), Name = rightItem["Name"] == DBNull.Value ? "" : Convert.ToString(rightItem["Name"]), Description = rightItem["Description"] == DBNull.Value ? "" : Convert.ToString(rightItem["Description"]), IsAssigned = rightItem["IsAssigned"] == DBNull.Value ? false : Convert.ToBoolean(rightItem["IsAssigned"]) }); } data.Add(rightsForPermissionDTO); } } } return(data); }
public async Task <IActionResult> EditRightsOfPermission(RightsForPermissionDTO model) { var roleManager = _serviceProvider.GetRequiredService <RoleManager <ApplicationRole> >(); var permissionRights = new List <AssignRightsToPermission>(); var permissionRightIDs = new List <string>(); foreach (var right in model.RightsWithIsAssigned) { if (right.IsAssigned) { permissionRightIDs.Add(right.ID.ToString()); } } var modelToList = new List <RightsForPermissionDTO> { model }; permissionRights = modelToList.GroupBy(x => new { x.PermissionID }).Select(y => new AssignRightsToPermission { PermissionID = y.Key.PermissionID, RightIDs = string.Join(",", permissionRightIDs) }).ToList(); AdminRepository.AssignRightsToPermission(permissionRights); // Get all roles affected by permissions change var rolesHavingPermission = AdminRepository.GetRolesHavingPermission(model.PermissionID); // Get all RightIDs var allRightIDs = AdminRepository.GetAllRightIDs(); // Foreach role with Permission model.PermissionID foreach (var roleItem in rolesHavingPermission) { var assignRightsToRole = new AssignRightsToRole { RoleID = roleItem.ID, RightIDs = string.Join(",", permissionRightIDs) }; var applicationRoleItem = new ApplicationRole(roleItem.Name, roleItem.ID); var listAssignRightsToRole = new List <AssignRightsToRole> { assignRightsToRole }; // Update RoleRights Table - Delete all values where Role ID is RoleID and Insert RoleRights model AdminRepository.AssignRightsToRole(listAssignRightsToRole); // Get Application Role var applicationRole = roleManager.FindByNameAsync(roleItem.Name).Result; // Modify Identity Table AspNetRoleClaims foreach (var rightID in allRightIDs) { if (permissionRightIDs.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")); }