/* (non-Javadoc) * @see org.theospi.portfolio.security.app.ApplicationAuthorizer#isAuthorized(org.theospi.portfolio.security.AuthorizationFacade, org.theospi.portfolio.shared.model.Agent, java.lang.String, org.theospi.portfolio.shared.model.Id) */ public Boolean isAuthorized(AuthorizationFacade facade, Agent agent, String function, Id id) { logger.debug("isAuthorized?(...) invoked in MatrixAuthorizer"); if (MatrixFunctionConstants.EVALUATE_MATRIX.equals(function) || MatrixFunctionConstants.REVIEW_MATRIX.equals(function) || MatrixFunctionConstants.USE_SCAFFOLDING.equals(function)) { return new Boolean(facade.isAuthorized(function, id)); } else if (MatrixFunctionConstants.DELETE_SCAFFOLDING.equals(function)) { Scaffolding scaffolding = getMatrixManager().getScaffolding(id); if (scaffolding == null) return new Boolean(facade.isAuthorized(agent, function, id)); if (!scaffolding.isPublished() && (scaffolding.getOwner().equals(agent)) || facade.isAuthorized(agent, function, scaffolding.getWorksiteId())) return new Boolean(true); } else if (ContentHostingService.EVENT_RESOURCE_READ.equals(function)) { return isFileAuth(facade, agent, id); } else if (function.equals(MatrixFunctionConstants.CREATE_SCAFFOLDING)) { return new Boolean(facade.isAuthorized(agent, function, id)); } else if (function.equals(MatrixFunctionConstants.EDIT_SCAFFOLDING)) { return new Boolean(facade.isAuthorized(agent, function, id)); } else if (function.equals(MatrixFunctionConstants.EXPORT_SCAFFOLDING)) { return new Boolean(facade.isAuthorized(agent, function, id)); } else if (function.equals(MatrixFunctionConstants.VIEW_SCAFFOLDING_GUIDANCE)) { // If I can eval, review, or own it ScaffoldingCell sCell = getMatrixManager().getScaffoldingCellByWizardPageDef(id); // sCell.getWizardPageDefinition().get if (sCell == null) throw new NullPointerException( "The cell was not found. Wizard Page Def for cell: " + id.getValue()); Boolean returned = null; Id worksiteId = sCell.getScaffolding().getWorksiteId(); // first check global perms for the site if (checkPerms( facade, new String[] { MatrixFunctionConstants.USE_SCAFFOLDING, MatrixFunctionConstants.EVALUATE_MATRIX, MatrixFunctionConstants.REVIEW_MATRIX }, worksiteId)) { return Boolean.valueOf(true); } for (Iterator iter = sCell.getCells().iterator(); iter.hasNext(); ) { Cell cell = (Cell) iter.next(); if (checkPerms( facade, new String[] { MatrixFunctionConstants.EVALUATE_MATRIX, MatrixFunctionConstants.REVIEW_MATRIX }, cell.getId())) { return Boolean.valueOf(true); } } returned = Boolean.valueOf(sCell.getScaffolding().getOwner().equals(agent)); if (returned.booleanValue()) return returned; } else if (function.equals(MatrixFunctionConstants.EDIT_SCAFFOLDING_GUIDANCE)) { ScaffoldingCell sCell = getMatrixManager().getScaffoldingCellByWizardPageDef(id); Agent owner = null; if (sCell != null) { owner = sCell.getScaffolding().getOwner(); } return new Boolean(agent.equals(owner)); } else if (function.equals(MatrixFunctionConstants.EVALUATE_SPECIFIC_MATRIXCELL)) { WizardPage page = getMatrixManager().getWizardPage(id); Id siteId = idManager.getId(page.getPageDefinition().getSiteId()); // make sure that the target site gets tested facade.pushAuthzGroups(siteId.getValue()); return new Boolean( facade.isAuthorized(agent, MatrixFunctionConstants.EVALUATE_MATRIX, siteId)); } return null; // don't care }