diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index e835890..6dab25b 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -10,6 +10,9 @@ uses + + uses + diff --git a/pom.xml b/pom.xml index 2709b62..4315203 100644 --- a/pom.xml +++ b/pom.xml @@ -197,6 +197,11 @@ workspace-application-handler [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + org.gcube.dvos + usermanagement-core + provided + org.gcube.common home-library diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java index 9567f0e..b7fbe32 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java @@ -108,10 +108,17 @@ import org.gcube.portlets.widgets.exporter.shared.SaveReportFileExistException; import org.gcube.portlets.widgets.exporter.shared.TypeExporter; import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.gcube.vomanagement.usermanagement.RoleManager; +import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; +import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; +import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; +import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayRoleManager; +import org.gcube.vomanagement.usermanagement.model.RoleModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.liferay.portal.model.User; import com.liferay.portal.model.UserModel; import com.liferay.portal.service.LockLocalServiceUtil; import com.liferay.portal.service.UserLocalServiceUtil; @@ -129,10 +136,6 @@ import com.liferay.portlet.documentlibrary.model.DLFileEntry; public class ReportServiceImpl extends RemoteServiceServlet implements ReportService { private static final Logger _log = LoggerFactory.getLogger(ReportServiceImpl.class); - /** - * used for debugging in eclipse - */ - private boolean withinPortal = true; public static final String TEST_SCOPE = "/gcube/devsec/devVRE"; //public static final String TEST_SCOPE = "/gcube/devNext/NextNext"; @@ -195,16 +198,26 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe SessionManager.getInstance().getASLSession(sessionID, user).setUserFullName(fullName); } - - if (!withinPortal) - _log.warn("\n\n****** Starting in Development MODE ******\n\n"); - return SessionManager.getInstance().getASLSession(sessionID, user); } public static String getDevUser() { return "massimiliano.assante"; } + /** + * + * @return true if you're running into the portal, false if in development + */ + private boolean isWithinPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) { + _log.trace("Development Mode ON"); + return false; + } + } /** * Retrieve the user saved template names * @@ -1511,7 +1524,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe String fullName = username+" FULL"; String thumbnailURL = "images/Avatar_default.png"; - if (withinPortal) { + if (isWithinPortal()) { UserModel user = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), username); thumbnailURL = "/image/user_male_portrait?img_id="+user.getPortraitId(); @@ -1641,13 +1654,61 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } return rsgClient; } + /** + * the list of Regional Fishery Management Organizations (RFMO) associated to the current user is constructed by looking at the roles + * of the current user. + * + * @returnt the list of Regional Fishery Management Organizations (RFMO) associated to the current user. + */ + private ArrayList getUserRFMOs() { + if (! isWithinPortal()) + return new ArrayList(); + ArrayList toReturn = new ArrayList(); + RoleManager rm = new LiferayRoleManager(); + ASLSession session = getASLSession(); + try { + User theUser = OrganizationsUtil.validateUser(session.getUsername()); + List roles = rm.listRolesByUserAndGroup(""+session.getGroupId(), ""+theUser.getUserId()); + for (RoleModel role : roles) { + _log.info("Role " + role.getRoleName() + " Adding RFMO"); + if (role.getRoleName().endsWith("-Editor")) { + String[] splits = role.getRoleName().split("-"); + toReturn.add(splits[0]); + _log.info("Added grant for RFMO="+splits[0]); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return toReturn; + } + /** + * + * @return whether the user is a VRE Manager for this VRE or not. + */ + private boolean isVREManager() { + if (isWithinPortal()) { + RoleManager rm = new LiferayRoleManager(); + ASLSession session = getASLSession(); + + try { + User theUser = OrganizationsUtil.validateUser(session.getUsername()); + List roles = rm.listRolesByUserAndGroup(""+session.getGroupId(), ""+theUser.getUserId()); + for (RoleModel role : roles) + if (role.getRoleName().equalsIgnoreCase("VRE-Manager")) return true; + } + catch (Exception e) { + e.printStackTrace(); + } + return false; + } else { + _log.warn("Working in Eclipse, returning all rights"); + return true; + } + } @Override public ArrayList listVMEReports() { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } ArrayList toReturn = new ArrayList(); ReportType type = new ReportType(); type.setTypeIdentifier("Vme"); @@ -1655,10 +1716,35 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe RsgClient rsgClient = getRsgSecureClient(); _log.debug("listVMEReports() securedWithEncryptedToken completed"); + if (isVREManager()) { + for (ReportEntry re : rsgClient.listReports(type)) { + String rfmo = re.getOwner(); + String name = re.getIdentifier(); + toReturn.add(new VMEReportBean(""+re.getId(), rfmo, name)); + } + } else { + ArrayList allowedRFMOs = getUserRFMOs(); + for (ReportEntry re : rsgClient.listReports(type)) { + String rfmo = re.getOwner().trim(); + String name = re.getIdentifier(); + for (String allowedRFMO : allowedRFMOs) { + if (allowedRFMO.compareTo(rfmo) == 0) { + toReturn.add(new VMEReportBean(""+re.getId(), rfmo, name)); + _log.debug("Added " + rfmo + " - " + name); + } + } + + } + } + + boolean isManager = isVREManager(); + ArrayList allowedRFMOs = getUserRFMOs(); + for (ReportEntry re : rsgClient.listReports(type)) { String rfmo = re.getOwner(); String name = re.getIdentifier(); - toReturn.add(new VMEReportBean(""+re.getId(), rfmo, name)); + if (isManager || allowedRFMOs.contains(rfmo)) + toReturn.add(new VMEReportBean(""+re.getId(), rfmo, name)); } return toReturn;