...
Code Block | ||
---|---|---|
| ||
boolean isAuthorized(org.osid.id.Id agentId, org.osid.id.Id functionId, org.osid.id.Id qualifierId) throws org.osid.NotFoundException, org.osid.OperationFailedException, org.osid.PermissionDeniedException { org.osid.id.Id issueId; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { issueId = qualifierid; } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { org.osid.hold.Hold hold = holdLookupSession.getHold(qualifierId); issueId = hold.getIssueId(); } else { return (underlyingAuthorizationProvider.isAuthorized(agentId, functionId, qualfiierId)); } org.osid.id.Id resourceId = resourceAgentSession.getResourceIdByAgent(agentId); org.osid.hold.Issue issue = issueLookupSession.getIssue(issueId); OrganizationIssueRecord record = (OrganizationIssueRecord) issue.getIssueRecord(ORGANIZATION_ISSUE_RECORD_TYPE); org.osid.id.IdList organizationIds; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldCreatorOrganizationIds(); } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldUpdaterOrganizationIds(); } try { while (organizationIds.hasNext()) { org.osid.id.Id orgId = orgIdsorganizationIds.getNextId(); try (org.osid.personnel.PositionList positions = positionLookupSession.getPositionsForOrganization(orgId)) { while (positions.hasNext()) { org.osid.personnel.Position position = positions.getNextPosition(); try (org.osid.personnel.AppintmentList appointments = appointmentLookupSession.getAppointmentsForPersonAndPosition(resourceId, position.getNextId()) { if (appointments.hasNext()) { return (true); } } } } } return (false); } finally { organizationIds.close(); } } |
...
Designing around with services is always a choosing with side of the line has ownership of a problem. If the problem of mapping Agents to Resources doesn't belong to the Authorization OSID, then maybe it's a problem for the Resource OSID (as what is implied by its definition). The next iteration on the authorization implementation is:
Code Block | ||
---|---|---|
| ||
boolean isAuthorized(org.osid.id.Id agentId, org.osid.id.Id functionId, org.osid.id.Id qualifierId) throws org.osid.NotFoundException, org.osid.OperationFailedException, org.osid.PermissionDeniedException { org.osid.id.Id issueId; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { issueId = qualifierid; } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { org.osid.hold.Hold hold = holdLookupSession.getHold(qualifierId); issueId = hold.getIssueId(); } else { return (underlyingAuthorizationProvider.isAuthorized(agentId, functionId, qualfiierId)); } org.osid.hold.Issue issue = issueLookupSession.getIssue(issueId); OrganizationIssueRecord record = (OrganizationIssueRecord) issue.getIssueRecord(ORGANIZATION_ISSUE_RECORD_TYPE); org.osid.id.IdList organizationIds; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldCreatorOrganizationIds(); } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldUpdaterOrganizationIds(); } try { while (organizationIds.hasNext()) { if (resourceAgentSession.isAgentForResource(agentId, organizationIds.getNextId()) { return (true); } return (false); } finally { organizationIds.close(); } } |
Deeper into the Resource Can
...