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.sys.batch.service.impl;
017
018 import java.io.File;
019 import java.util.List;
020
021 import org.kuali.kfs.sys.FinancialSystemModuleConfiguration;
022 import org.kuali.kfs.sys.KFSConstants;
023 import org.kuali.kfs.sys.batch.BatchFile;
024 import org.kuali.kfs.sys.batch.BatchFileUtils;
025 import org.kuali.kfs.sys.batch.service.BatchFileAdminAuthorizationService;
026 import org.kuali.kfs.sys.context.SpringContext;
027 import org.kuali.rice.kim.bo.Person;
028 import org.kuali.rice.kim.bo.impl.KimAttributes;
029 import org.kuali.rice.kim.bo.types.dto.AttributeSet;
030 import org.kuali.rice.kim.service.IdentityManagementService;
031 import org.kuali.rice.kim.util.KimConstants;
032 import org.kuali.rice.kns.bo.ModuleConfiguration;
033 import org.kuali.rice.kns.service.KualiModuleService;
034 import org.kuali.rice.kns.service.ModuleService;
035 import org.kuali.rice.kns.util.KNSConstants;
036
037 public class BatchFileAdminAuthorizationServiceImpl implements BatchFileAdminAuthorizationService {
038
039 private IdentityManagementService identityManagementService;
040 private KualiModuleService kualiModuleService;
041
042 public boolean canDownload(BatchFile batchFile, Person user) {
043 return getIdentityManagementService().isAuthorizedByTemplateName(user.getPrincipalId(),
044 KNSConstants.KNS_NAMESPACE, KFSConstants.PermissionTemplate.VIEW_BATCH_FILES.name,
045 generateDownloadCheckPermissionDetails(batchFile, user), generateDownloadCheckRoleQualifiers(batchFile, user));
046 }
047
048 public boolean canDelete(BatchFile batchFile, Person user) {
049 return getIdentityManagementService().isAuthorizedByTemplateName(user.getPrincipalId(),
050 KNSConstants.KNS_NAMESPACE, KFSConstants.PermissionTemplate.VIEW_BATCH_FILES.name,
051 generateDownloadCheckPermissionDetails(batchFile, user), generateDownloadCheckRoleQualifiers(batchFile, user));
052 }
053
054 protected String determineNamespaceCode(BatchFile batchFile) {
055 for (ModuleService moduleService : getKualiModuleService().getInstalledModuleServices()) {
056 ModuleConfiguration moduleConfiguration = moduleService.getModuleConfiguration();
057 if (moduleConfiguration instanceof FinancialSystemModuleConfiguration) {
058 List<String> batchFileDirectories = ((FinancialSystemModuleConfiguration) moduleConfiguration).getBatchFileDirectories();
059 for (String batchFileDirectoryName : batchFileDirectories) {
060 File directory = new File(batchFileDirectoryName).getAbsoluteFile();
061 if (BatchFileUtils.isSuperDirectoryOf(directory, batchFile.retrieveFile())) {
062 return moduleConfiguration.getNamespaceCode();
063 }
064 }
065 }
066 }
067 return null;
068 }
069
070 protected AttributeSet generateDownloadCheckPermissionDetails(BatchFile batchFile, Person user) {
071 return generatePermissionDetails(batchFile, user);
072 }
073
074 protected AttributeSet generateDownloadCheckRoleQualifiers(BatchFile batchFile, Person user) {
075 return generateRoleQualifiers(batchFile, user);
076 }
077
078 protected AttributeSet generateDeleteCheckPermissionDetails(BatchFile batchFile, Person user) {
079 return generatePermissionDetails(batchFile, user);
080 }
081
082 protected AttributeSet generateDeleteCheckRoleQualifiers(BatchFile batchFile, Person user) {
083 return generateRoleQualifiers(batchFile, user);
084 }
085
086 protected AttributeSet generatePermissionDetails(BatchFile batchFile, Person user) {
087 AttributeSet permissionDetails = new AttributeSet();
088 permissionDetails.put(KimAttributes.NAMESPACE_CODE, determineNamespaceCode(batchFile));
089 permissionDetails.put("filePath", batchFile.retrieveFile().getAbsolutePath());
090 return permissionDetails;
091 }
092
093 protected AttributeSet generateRoleQualifiers(BatchFile batchFile, Person user) {
094 return new AttributeSet();
095 }
096
097 protected IdentityManagementService getIdentityManagementService() {
098 if (identityManagementService == null) {
099 identityManagementService = SpringContext.getBean(IdentityManagementService.class);
100 }
101 return identityManagementService;
102 }
103
104 public KualiModuleService getKualiModuleService() {
105 if (kualiModuleService == null) {
106 kualiModuleService = SpringContext.getBean(KualiModuleService.class);
107 }
108 return kualiModuleService;
109 }
110 }