001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.sec.document.authorization;
017
018 import java.util.List;
019 import java.util.Set;
020
021 import org.kuali.kfs.sec.service.AccessSecurityService;
022 import org.kuali.kfs.sys.businessobject.AccountingLine;
023 import org.kuali.kfs.sys.context.SpringContext;
024 import org.kuali.kfs.sys.document.AccountingDocument;
025 import org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizer;
026 import org.kuali.kfs.sys.document.web.AccountingLineRenderingContext;
027 import org.kuali.kfs.sys.document.web.AccountingLineViewAction;
028 import org.kuali.rice.kim.bo.Person;
029
030
031 /**
032 * AccountingLineAuthorizer that wraps access security checks around another AccountingLineAuthorizer configured for the document type
033 */
034 public class SecAccountingLineAuthorizer implements AccountingLineAuthorizer {
035 protected AccountingLineAuthorizer lineAuthorizer;
036
037 public List<AccountingLineViewAction> getActions(AccountingDocument accountingDocument, AccountingLineRenderingContext accountingLineRenderingContext, String accountingLinePropertyName, Integer lineIndex, Person currentUser, String groupTitle) {
038 return lineAuthorizer.getActions(accountingDocument, accountingLineRenderingContext, accountingLinePropertyName, lineIndex, currentUser, groupTitle);
039 }
040
041 public Set<String> getUnviewableBlocks(AccountingDocument accountingDocument, AccountingLine accountingLine, boolean newLine, Person currentUser) {
042 return lineAuthorizer.getUnviewableBlocks(accountingDocument, accountingLine, newLine, currentUser);
043 }
044
045 /**
046 * Makes call to check edit access security on accounting line
047 *
048 * @see org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizer#hasEditPermissionOnAccountingLine
049 */
050 public boolean hasEditPermissionOnAccountingLine(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, Person currentUser, boolean pageIsEditable) {
051 boolean hasEditPermission = lineAuthorizer.hasEditPermissionOnAccountingLine(accountingDocument, accountingLine, accountingLineCollectionProperty, currentUser, pageIsEditable);
052
053 if (hasEditPermission) {
054 hasEditPermission = SpringContext.getBean(AccessSecurityService.class).canEditDocumentAccountingLine(accountingDocument, accountingLine, currentUser);
055 }
056
057 return hasEditPermission;
058 }
059
060 /**
061 * If access was granted to line and line authorizer allows field modify then allow field modify
062 *
063 * @see org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizer#hasEditPermissionOnField
064 */
065 public boolean hasEditPermissionOnField(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, String fieldName, boolean editableLine, boolean editablePage, Person currentUser) {
066 boolean hasEditPermission = lineAuthorizer.hasEditPermissionOnField(accountingDocument, accountingLine, accountingLineCollectionProperty, fieldName, editableLine, editablePage, currentUser);
067
068 return hasEditPermission && editableLine;
069 }
070
071 public boolean isGroupEditable(AccountingDocument accountingDocument, List<? extends AccountingLineRenderingContext> accountingLineRenderingContexts, Person currentUser) {
072 return lineAuthorizer.isGroupEditable(accountingDocument, accountingLineRenderingContexts, currentUser);
073 }
074
075 public boolean renderNewLine(AccountingDocument accountingDocument, String accountingGroupProperty) {
076 return lineAuthorizer.renderNewLine(accountingDocument, accountingGroupProperty);
077 }
078
079 /**
080 * Sets the lineAuthorizer attribute value.
081 *
082 * @param lineAuthorizer The lineAuthorizer to set.
083 */
084 public void setLineAuthorizer(AccountingLineAuthorizer lineAuthorizer) {
085 this.lineAuthorizer = lineAuthorizer;
086 }
087
088
089 }