1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.sys.batch.service.impl;
17  
18  import java.io.File;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  
23  import org.kuali.ole.sys.FinancialSystemModuleConfiguration;
24  import org.kuali.ole.sys.OLEConstants;
25  import org.kuali.ole.sys.batch.BatchFile;
26  import org.kuali.ole.sys.batch.BatchFileUtils;
27  import org.kuali.ole.sys.batch.service.BatchFileAdminAuthorizationService;
28  import org.kuali.ole.sys.context.SpringContext;
29  import org.kuali.ole.sys.identity.OleKimAttributes;
30  import org.kuali.rice.kim.api.KimConstants;
31  import org.kuali.rice.kim.api.identity.Person;
32  import org.kuali.rice.kim.api.services.IdentityManagementService;
33  import org.kuali.rice.krad.bo.ModuleConfiguration;
34  import org.kuali.rice.krad.service.KualiModuleService;
35  import org.kuali.rice.krad.service.ModuleService;
36  import org.kuali.rice.krad.util.KRADConstants;
37  
38  public class BatchFileAdminAuthorizationServiceImpl implements BatchFileAdminAuthorizationService {
39  
40      private IdentityManagementService identityManagementService;
41      private KualiModuleService kualiModuleService;
42      
43      @Override
44      public boolean canDownload(BatchFile batchFile, Person user) {
45          return getIdentityManagementService().isAuthorizedByTemplateName(user.getPrincipalId(),
46                  OLEConstants.PermissionTemplate.VIEW_BATCH_FILES.namespace, OLEConstants.PermissionTemplate.VIEW_BATCH_FILES.name,
47                  generateDownloadCheckPermissionDetails(batchFile, user), generateDownloadCheckRoleQualifiers(batchFile, user));
48      }
49  
50      @Override
51      public boolean canDelete(BatchFile batchFile, Person user) {
52          return getIdentityManagementService().isAuthorizedByTemplateName(user.getPrincipalId(),
53                  OLEConstants.PermissionTemplate.VIEW_BATCH_FILES.namespace, OLEConstants.PermissionTemplate.VIEW_BATCH_FILES.name,
54                  generateDownloadCheckPermissionDetails(batchFile, user), generateDownloadCheckRoleQualifiers(batchFile, user));
55      }
56      
57      protected String determineNamespaceCode(BatchFile batchFile) {
58          for (ModuleService moduleService : getKualiModuleService().getInstalledModuleServices()) {
59              ModuleConfiguration moduleConfiguration = moduleService.getModuleConfiguration();
60              if (moduleConfiguration instanceof FinancialSystemModuleConfiguration) {
61                  List<String> batchFileDirectories = ((FinancialSystemModuleConfiguration) moduleConfiguration).getBatchFileDirectories();
62                  for (String batchFileDirectoryName : batchFileDirectories) {
63                      File directory = new File(batchFileDirectoryName).getAbsoluteFile();
64                      String fileName = batchFile.getFileName();
65                      if(fileName.contains(OLEConstants.REENCUM_RECURR))   {
66                          return moduleConfiguration.getNamespaceCode();
67                      } else if (BatchFileUtils.isSuperDirectoryOf(directory, batchFile.retrieveFile())) {
68                          return moduleConfiguration.getNamespaceCode();
69                      }
70                  }
71              }
72          }
73          return null;
74      }
75  
76      protected Map<String,String> generateDownloadCheckPermissionDetails(BatchFile batchFile, Person user) {
77          return generatePermissionDetails(batchFile, user);
78      }
79      
80      protected Map<String,String> generateDownloadCheckRoleQualifiers(BatchFile batchFile, Person user) {
81          return generateRoleQualifiers(batchFile, user);
82      }
83  
84      protected Map<String,String> generateDeleteCheckPermissionDetails(BatchFile batchFile, Person user) {
85          return generatePermissionDetails(batchFile, user);
86      }
87      
88      protected Map<String,String> generateDeleteCheckRoleQualifiers(BatchFile batchFile, Person user) {
89          return generateRoleQualifiers(batchFile, user);
90      }
91  
92      protected Map<String,String> generatePermissionDetails(BatchFile batchFile, Person user) {
93          Map<String,String> permissionDetails = new HashMap<String,String>();
94          permissionDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, determineNamespaceCode(batchFile));
95          permissionDetails.put(OleKimAttributes.FILE_PATH, replaceSlashes(batchFile.getPath() + File.separator + batchFile.getFileName()));
96          return permissionDetails;
97      }
98      
99      
100 
101 
102 
103 
104 
105 
106     private String replaceSlashes(String filePath) {
107 
108         if (File.separatorChar == '\\') {
109             filePath = filePath.replace(File.separatorChar, '/');
110         }
111 
112         return filePath;
113     }
114 
115     protected Map<String,String> generateRoleQualifiers(BatchFile batchFile, Person user) {
116         return new HashMap<String,String>();
117     }
118     
119     protected IdentityManagementService getIdentityManagementService() {
120         if (identityManagementService == null) {
121             identityManagementService = SpringContext.getBean(IdentityManagementService.class);
122         }
123         return identityManagementService;
124     }
125 
126     public KualiModuleService getKualiModuleService() {
127         if (kualiModuleService == null) {
128             kualiModuleService = SpringContext.getBean(KualiModuleService.class);
129         }
130         return kualiModuleService;
131     }
132 }