/** Licensed Materials - Property of IBM IBM Cognos Products: DOCS (C) Copyright IBM Corp. 2005, 2008 US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ // * // * Permissions.sln // * // * Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved. // * Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated). // * // * Description: This sample illustrates how to manipulate permissions. // * // * Input: Search Path to a permissions object. Possible values are: // * Name Search Path // * Administration /capability/securedFunction[@name='Administration'] // * Query Studio /capability/securedFunction[@name='Query Studio'] // * Report Studio /capability/securedFunction[@name='Report Studio'] // * SDK /capability/securedFunction[@name='SDK'] // * // * // * Outcome: Adds or removes the current user from the permissions/Administration user list. // * // * using System; using System.Web.Services.Protocols; using SamplesCommon; using cognosdotnet_10_2; namespace Permissions { /// /// Summary description for Permissions. /// class Permissions { /// /// The main entry point for the application. /// /// public Permissions(){} static void Main(string[] args) { string cBIUrl = ""; PermissionsDlg permissionsDlgObject = null; contentManagerService1 cmService = null; SamplesConnect connectDlg = new SamplesConnect(); if (args.GetLength(0) == 0 ) { // GUI mode connectDlg.ShowDialog(); if (connectDlg.IsConnectedToCBI() == true) { cmService = connectDlg.CBICMS; cBIUrl = connectDlg.CBIURL; permissionsDlgObject = new PermissionsDlg(); permissionsDlgObject.setConnection(cmService, cBIUrl); permissionsDlgObject.ShowDialog(); } } } public bool setPermissions(contentManagerService1 CBICMS, ref string resultMessage, String path) { baseClass[] results = new baseClass[] {}; folder csFolder = null; account myAccount = null; permission newPermission = null; string permState = ""; myAccount = getLogonAccount(CBICMS); string folderName = path; searchPathMultipleObject cmTargetPath = new searchPathMultipleObject (); cmTargetPath.Value = folderName; results = CBICMS.query(cmTargetPath, new propEnum[] { propEnum.searchPath, propEnum.policies }, new sort[] {}, new queryOptions()); if ( (results == null) || (results.GetLength(0) <= 0) ) { resultMessage = "..expected folder was not found for the current user.\n" + "Please create this folder before running this sample."; return false; } csFolder = (folder)results[0]; policy pol; for (int i = 0; i < csFolder.policies.value.GetLength(0); i++) { pol = csFolder.policies.value[i]; if (0 == pol.securityObject.searchPath.value.CompareTo(myAccount.searchPath.value)) { bool found = false; newPermission = new permission(); newPermission.name = "read"; int k = pol.permissions.GetLength(0) + 1; permission[] cur = new permission[k]; for (int j = 0; j < pol.permissions.GetLength(0); j++) { if (0 == pol.permissions[j].name.CompareTo("read")) { if (pol.permissions[j].access == accessEnum.deny) { pol.permissions[j].access = accessEnum.grant; newPermission.access = accessEnum.grant; permState = "GRANTED"; } else { pol.permissions[j].access = accessEnum.deny; newPermission.access = accessEnum.deny; permState = "DENIED"; } found = true; } cur[j] = pol.permissions[j]; } if (! found) { cur[cur.GetLength(0) - 1] = newPermission; pol.permissions = cur; } CBICMS.update( new baseClass[] { csFolder }, new updateOptions()); resultMessage += "Successfully " + permState + " " + newPermission.name + " permission on folder for " + myAccount.defaultName.value; return true; } } resultMessage = "Unable to find \"" + folderName + "\" for " + myAccount.defaultName.value; return false; } public account getLogonAccount(contentManagerService1 cBICMS) { propEnum[] props = new propEnum[] { propEnum.searchPath, propEnum.defaultName, propEnum.policies, propEnum.objectClass }; account myAccount = new account(); try { searchPathMultipleObject cmSearchPath = new searchPathMultipleObject (); cmSearchPath.Value = "~"; baseClass[] bc = cBICMS.query(cmSearchPath, props, new sort[] {}, new queryOptions()); if ((bc != null) && (bc.GetLength(0) > 0)) { for (int i = 0; i < bc.GetLength(0); i++) { myAccount = (account)bc[i]; } } } catch (System.Exception ex) { //An exception here likely indicates the client is not currently //logged in, so the query fails. return null; } return myAccount; } } }