public void deleteUserFromPermissions(string userSearchPath, CognosReportNetService crnService, string sPath) { //set searchPath of the required folder //searchPathMultipleObject spMulti = new searchPathMultipleObject(); //spMulti.Value = sPath; report pFolder = (report)crnService.query(sPath, new propEnum[]{propEnum.searchPath,propEnum.policies},new sort[]{},new queryOptions())[0]; //keep trak if the aecurity object was found in the permissions bool found = false; for (int i = 0; i < pFolder.policies.value.Length && !found; i ++) { policy policy = pFolder.policies.value[i]; //If the security object already exists, update its permissions if(policy.securityObject.searchPath.value.Equals(userSearchPath)) { found = true; } } //if the security object exists, remove it from the array of permissions if (found) { policy[] newPolicies = new policy[pFolder.policies.value.Length-1]; policyArrayProp pArray = new policyArrayProp(); int newPolicyCount = 0; for (int i = 0; i < pFolder.policies.value.Length ; i ++) { policy policy = pFolder.policies.value[i]; if(!policy.securityObject.searchPath.value.Equals(userSearchPath)) { newPolicies[newPolicyCount] = new policy (); newPolicies[newPolicyCount].securityObject = pFolder.policies.value[i].securityObject; newPolicies[newPolicyCount].permissions = pFolder.policies.value[i].permissions; newPolicyCount = newPolicyCount + 1; } } //If the security object does not exist, nothing to delete pArray.value = newPolicies; pFolder.policies = pArray; crnService.update(new baseClass[]{pFolder},new updateOptions() ); } }
public void setPermissionsOnFolders(string userSearchPath, CognosReportNetService crnService, string sPath) { report pFolder = (report)crnService.query(sPath, new propEnum[]{propEnum.searchPath,propEnum.policies},new sort[]{},new queryOptions())[0]; bool found = false; permission newPermission = new permission(); newPermission.name ="execute"; newPermission.access = accessEnum.deny; for (int i = 0; i < pFolder.policies.value.Length && !found; i ++) { policy policy = pFolder.policies.value[i]; //If the security object already exists, update its permissions if(policy.securityObject.searchPath.value.Equals(userSearchPath)) { found = true; permission[] newPerms = new permission[policy.permissions.Length + 1]; for(int j = 0; j < policy.permissions.Length; j ++) { newPerms[j] = policy.permissions[j]; } newPerms[newPerms.Length - 1] = newPermission; policy.permissions = newPerms; } } //If the security object does not exist, create a new one if(!found) { baseClass entry = null; //spMulti.Value = userSearchPath; entry = crnService.query(userSearchPath, new propEnum[]{},new sort[]{},new queryOptions())[0]; policy newPolicy = new policy(); newPolicy.securityObject = entry; permission[] permissions = new permission[1]; permissions[0] = newPermission; newPolicy.permissions = permissions; policyArrayProp existingPols = pFolder.policies ; policy[] newPols = new policy[existingPols.value.Length + 1]; for(int j = 0; j < existingPols.value.Length; j ++) { newPols[j] = existingPols.value[j]; } newPols[newPols.Length - 1] = newPolicy; existingPols.value = newPols; } crnService.update(new baseClass[]{pFolder},new updateOptions() ); }