Mercurial > hg > LGDataverses
view src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java @ 14:be7787c36e58 default tip
new: nofity LGSercies for deleted files
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 02 Nov 2015 16:41:23 +0100 |
parents | a50cf11e5178 |
children |
line wrap: on
line source
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.User; import edu.harvard.iq.dataverse.engine.command.Command; import edu.harvard.iq.dataverse.engine.command.impl.*; import java.util.HashMap; import java.util.Map; import javax.ejb.EJB; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; /** * * @author gdurand */ @ViewScoped @Named public class PermissionsWrapper implements java.io.Serializable { @EJB PermissionServiceBean permissionService; @Inject DataverseSession session; private Map<Long, Map<Class<? extends Command>, Boolean>> commandMap = new HashMap<>(); // Map to track whether a DvObject has "Permission.DownloadFile" // private Map<Long, Boolean> fileDownloadPermissionMap = new HashMap<>(); // { DvObject.id : Boolean } /** * Check if the current Dataset can Issue Commands * * @param commandName */ private boolean canIssueCommand(DvObject dvo, Class<? extends Command> command) { if ((dvo==null) || (dvo.getId()==null)){ return false; } if (command==null){ return false; } if (commandMap.containsKey(dvo.getId())) { Map<Class<? extends Command>, Boolean> dvoCommandMap = this.commandMap.get(dvo.getId()); if (dvoCommandMap.containsKey(command)) { return dvoCommandMap.get(command); } else { return addCommandtoDvoCommandMap(dvo, command, dvoCommandMap); } } else { Map newDvoCommandMap = new HashMap(); commandMap.put(dvo.getId(), newDvoCommandMap); return addCommandtoDvoCommandMap(dvo, command, newDvoCommandMap); } } private boolean addCommandtoDvoCommandMap(DvObject dvo, Class<? extends Command> command, Map<Class<? extends Command>, Boolean> dvoCommandMap) { if ( dvo==null || (dvo.getId()==null) ){ return false; } if (command==null){ return false; } boolean canIssueCommand; canIssueCommand = permissionService.on(dvo).canIssue(command); dvoCommandMap.put(command, canIssueCommand); return canIssueCommand; } /* Dataverse Commands */ public boolean canIssueUpdateDataverseCommand(DvObject dvo) { return canIssueCommand(dvo, UpdateDataverseCommand.class); } public boolean canIssuePublishDataverseCommand(DvObject dvo) { return canIssueCommand(dvo, PublishDataverseCommand.class); } public boolean canIssueDeleteDataverseCommand(DvObject dvo) { return canIssueCommand(dvo, DeleteDataverseCommand.class); } public boolean canIssueCreateDataverseCommand(DvObject dvo) { return canIssueCommand(dvo, CreateDataverseCommand.class); } public boolean canManagePermissions(DvObject dvo) { if (dvo==null || (dvo.getId()==null) ){ return false; } User u = session.getUser(); return dvo instanceof Dataverse ? canManageDataversePermissions(u, (Dataverse) dvo) : canManageDatasetPermissions(u, (Dataset) dvo); } public boolean canManageDataversePermissions(User u, Dataverse dv) { if ( dv==null || (dv.getId()==null)){ return false; } if (u==null){ return false; } return permissionService.userOn(u, dv).has(Permission.ManageDataversePermissions); } public boolean canManageDatasetPermissions(User u, Dataset ds) { if ( ds==null || (ds.getId()==null)){ return false; } if (u==null){ return false; } return permissionService.userOn(u, ds).has(Permission.ManageDatasetPermissions); } /** * Does this dvoObject have "Permission.DownloadFile"? * @param dvo * @return */ public boolean hasDownloadFilePermission(DvObject dvo){ if ((dvo==null)||(dvo.getId() == null)){ return false; } // Has this check already been done? Check the hash // if (this.fileDownloadPermissionMap.containsKey(dvo.getId())){ // Yes, return previous answer return this.fileDownloadPermissionMap.get(dvo.getId()); } // Check permissions // if (this.permissionService.on(dvo).has(Permission.DownloadFile)){ // Yes, has permission, store result // this.fileDownloadPermissionMap.put(dvo.getId(), true); return true; }else { // No permission, store result // this.fileDownloadPermissionMap.put(dvo.getId(), false); return false; } } /* ----------------------------------- Dataset Commands ----------------------------------- */ // CREATE DATASET public boolean canIssueCreateDatasetCommand(DvObject dvo){ return canIssueCommand(dvo, CreateDatasetCommand.class); } // UPDATE DATASET public boolean canIssueUpdateDatasetCommand(DvObject dvo){ return canIssueCommand(dvo, UpdateDatasetCommand.class); } // DELETE DATASET public boolean canIssueDeleteDatasetCommand(DvObject dvo){ return canIssueCommand(dvo, DeleteDatasetCommand.class); } // PLUBLISH DATASET public boolean canIssuePublishDatasetCommand(DvObject dvo){ return canIssueCommand(dvo, PublishDatasetCommand.class); } }