added filter for RFMOs

git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@97916 82a268e6-3cf1-43bd-a215-b396298e98cf
master
Massimiliano Assante 10 years ago
parent c3878362c3
commit 70e7d0ad9c

@ -10,6 +10,9 @@
<dependent-module archiveName="gcube-reporting-library-3.5.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/gcube-reporting-library/gcube-reporting-library">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="fileupload-progress-bar-1.2.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/fileupload-progress-bar/fileupload-progress-bar">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="java-output-path" value="/${module}/target/www/WEB-INF/classes"/>
<property name="context-root" value="reports"/>
</wb-module>

@ -197,6 +197,11 @@
<artifactId>workspace-application-handler</artifactId>
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.dvos</groupId>
<artifactId>usermanagement-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library</artifactId>

@ -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<String> getUserRFMOs() {
if (! isWithinPortal())
return new ArrayList<String>();
ArrayList<String> toReturn = new ArrayList<String>();
RoleManager rm = new LiferayRoleManager();
ASLSession session = getASLSession();
try {
User theUser = OrganizationsUtil.validateUser(session.getUsername());
List<RoleModel> 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<RoleModel> 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<VMEReportBean> listVMEReports() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
ArrayList<VMEReportBean> toReturn = new ArrayList<VMEReportBean>();
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<String> 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<String> 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;