Sod Api
Sod Api
Introduction ........................................................................................................................ 1
Access Governor Overview.................................................................................................... 1
Web Services Overview ........................................................................................................ 2
Web Services Environment.................................................................................................... 3
Web Services Documentation ................................................................................................ 3
A Sample Client ................................................................................................................... 4
Introduction
ACTIVE Access GovernorTM detects segregation-of-duties (SOD) conflicts within an
organization, either preventing them from occurring or uncovering them so that they can
be properly managed. Designed for use with Oracle Applications, Access Governor
identifies conflicts at both the responsibility and function levels.
LogicalApps Web Services offers an API through which a user-provisioning system can
communicate with Access Governor. As a user is assigned new Oracle responsibilities,
the provisioning system uses API methods to request SOD evaluation; Access Governor
generates information about conflicts the new assignment has generated, and the pro-
visioning system uses API methods to receive that information.
A Sample Client
The following sample code represents the portion of a client user-provisioning system
that would use Web Services API calls to request that ACTIVE GovernanceTM perform
SOD analysis and to receive responses. You are assumed to be a Java programmer and to
be able to read much of this code without commentary. Annotations are intended to
explain data items required for SOD processing.
import com.logicalapps.onecenter.sod.ws.OCSimulationRequest;
import com.logicalapps.onecenter.sod.ws.OCSimulationResult;
import com.logicalapps.onecenter.sod.ws.SODWS;
import com.logicalapps.sod.SimulationConflict;
import com.logicalapps.sod.SimulationRequest;
import com.logicalapps.sod.SimulationResponsibilityEntry;
import com.logicalapps.sod.SimulationResult;
import com.logicalapps.webservice.WebServiceUtil;
import org.apache.wsif.WSIFService;
import java.util.*;
// 2. Locate the web service and tell WSIF to create a stub/proxy for it
2
SODWS sodService = (SODWS) WebServiceUtil.getService("SODService", location, SODWS.class,
"username", "password", "urn:SODWS", map);
try {
System.out.println("calling SOD test simulation");
6
results = sodService.simulate(request, true);
result = results[0];
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
while (i.hasNext()) {
SimulationConflict con = (SimulationConflict) i.next();
// remove variable data
int requestId = con.getRequestId();
int userId = con.getUserId();
String userName = con.getUserName();
con.setRequestId(-1);
con.setUserId(-1);
con.setUserName(null);
System.out.println("======");
System.out.println("verifying conflict:");
System.out.println("requestId: " + con.getRequestId());
System.out.println("userId: " + con.getUserId());
System.out.println("userName: " + con.getUserName());
System.out.println("conflictId: " + con.getConflictId());
7 System.out.println("conflictName: " + con.getConflictName());
System.out.println("approver: " + con.getApprover());
System.out.println("applicationId: " + con.getApplicationId());
System.out.println("applicationName: " + con.getApplicationName());
System.out.println("responsibilityId: " + con.getResponsibilityId());
System.out.println("responsibilityName: " + con.getResponsibilityName());
System.out.println("conflictingApplicationId: " + con.getConflictingApplicationId());
System.out.println("conflictingApplicationName: " + con.getConflictingApplicationName());
System.out.println("conflictingResponsibilityId: " + con.getConflictingResponsibilityId());
System.out.println("conflictingResponsibilityName: " + con.getConflictingResponsibilityName());
System.out.println("functionId: " + con.getFunctionId());
System.out.println("functionName: " + con.getFunctionName());
System.out.println("conflictingFunctionId: " + con.getConflictingFunctionId());
System.out.println("conflictingFunctionName: " + con.getConflictingFunctionName());
System.out.println("actionType: " + con.getActionType());
System.out.println("status: " + con.getStatus());
System.out.println("sameSOB: " + con.getSameSOB());
System.out.println("sameOU: " + con.getSameOU());
System.out.println("===================================================================");
con.setRequestId(requestId);
con.setUserId(userId);
con.setUserName(userName);
}
Within this code, the lines marked by numbers require the following explanations:
1 This line establishes the location at which SOD services are provided. Access Gover-
nor runs on an ACTIVE Governance Platform, and in this line you would replace the
word localhost with the name of the host system on which the Platform runs, and the
number 8080 with the port dedicated to the application server that supports the Plat-
form. Other elements of this line would be entered exactly as they are shown.
2 Two lines are identified by the number 2. Each is involved in establishing the web
service, and in each the word username must be replaced by the name of a user con-
figured on the ACTIVE Governance Platform, and the word password must be
replaced by the password configured for that user.
3 This block of the code calls the web service to request that SOD processing be performed
for a user who is being assigned Oracle responsibilities. The phrase EVALUATION_
USER must be replaced by the username of the Oracle user who is being assigned
responsibilities. This would typically be a parameterized value passed to the code.
(Note that this value also appears, and would also need to be replaced, in another line
near the end of this code sample.)
4 This line specifies the Oracle instance on which the user is being assigned responsi-
bilities, and the phrase CLIENT_ERP must be replaced by the name of the instance
(again, a parameterized value passed to the code). There may be more than one of
these lines, specifying more than one Oracle instance.
5 These lines specify Oracle responsibilities being assigned to the user; as parameters,
each takes the name of an application to which the responsibility belongs, the respon-
sibility itself, the Oracle security group, and the start and end dates for the responsi-
bility assignment. Of course, the values shown are examples and would be replaced
by values passed to the code.
6 The line that begins “OCSimulationResult[]” specifies an array of objects; each
object is of type OCSimulationResult. Each of these objects consists of SOD analysis
results for each Oracle ERP instance. The length of this OCSimulationResult array
always equals the number of Oracle ERP instances added to the OCSimulationRequst
object.