diff --git a/src/java/fr/paris/lutece/plugins/appcenter/business/User.java b/src/java/fr/paris/lutece/plugins/appcenter/business/User.java index ec39d6a..2111352 100644 --- a/src/java/fr/paris/lutece/plugins/appcenter/business/User.java +++ b/src/java/fr/paris/lutece/plugins/appcenter/business/User.java @@ -33,12 +33,17 @@ */ package fr.paris.lutece.plugins.appcenter.business; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import fr.paris.lutece.api.user.UserRole; +import fr.paris.lutece.portal.business.rbac.RBACRole; /** * This is the business class for the object User */ -public class User +public class User implements fr.paris.lutece.api.user.User { // Variables declarations private String _strId; @@ -47,6 +52,11 @@ public class User private String _userInfos; + /** + * User's roles. We use a HashMap instead of a Map so that the field is forced to be serializable. + */ + private Map _roles = new HashMap<>( ); + /** * Returns the Id * @@ -109,4 +119,45 @@ public void setUserInfos( String userInfos ) _userInfos = userInfos; } + @Override + public Map getUserRoles() { + return _roles; + } + + public void setUserRoles( Map roles) { + this._roles = roles; + } + + @Override + public String getAccessCode() { + return _strId; + } + + @Override + public String getEmail() { + return _strId; + } + + @Override + public String getLastName() { + return _strId; + } + + @Override + public String getFirstName() { + return _strId; + } + + @Override + public List getUserWorkgroups() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getRealm() { + // TODO Auto-generated method stub + return null; + } + } diff --git a/src/java/fr/paris/lutece/plugins/appcenter/service/DemandService.java b/src/java/fr/paris/lutece/plugins/appcenter/service/DemandService.java index cad0b46..1f71c3b 100644 --- a/src/java/fr/paris/lutece/plugins/appcenter/service/DemandService.java +++ b/src/java/fr/paris/lutece/plugins/appcenter/service/DemandService.java @@ -42,6 +42,8 @@ import fr.paris.lutece.plugins.appcenter.business.Demand; import fr.paris.lutece.plugins.appcenter.business.DemandFilter; import fr.paris.lutece.plugins.appcenter.business.DemandHome; +import fr.paris.lutece.plugins.appcenter.business.User; +import fr.paris.lutece.plugins.appcenter.business.UserHome; import fr.paris.lutece.plugins.appcenter.web.DemandJspBean; import fr.paris.lutece.portal.service.util.AppLogService; import fr.paris.lutece.portal.service.workflow.WorkflowService; @@ -49,6 +51,7 @@ import java.util.ArrayList; import java.util.List; import java.util.ListIterator; +import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; @@ -74,8 +77,11 @@ public static void saveDemand( Demand demand, Application application ) int nIdResource = demand.getId( ); int nIdWorkflow = DemandTypeService.getIdWorkflow( demand.getDemandType( ) ); WorkflowService.getInstance( ).getState( nIdResource, Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, -1 ); - WorkflowService.getInstance( ).executeActionAutomatic( nIdResource, Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, -1 ); - + + User user = UserHome.findByPrimaryKey( demand.getIdUserFront( ) ); + UserService.addRBACRole( user, application.getId( ) ); + + WorkflowService.getInstance( ).doProcessAction( nIdResource, Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, -1 , null, Locale.FRENCH, false, user ); } public static List getDemandsListByApplicationAndType( Application application, String strDemandType, Class demandClass ) diff --git a/src/java/fr/paris/lutece/plugins/appcenter/service/UserService.java b/src/java/fr/paris/lutece/plugins/appcenter/service/UserService.java index 04a0aca..1a5c884 100644 --- a/src/java/fr/paris/lutece/plugins/appcenter/service/UserService.java +++ b/src/java/fr/paris/lutece/plugins/appcenter/service/UserService.java @@ -36,10 +36,17 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; + +import fr.paris.lutece.api.user.UserRole; +import fr.paris.lutece.plugins.appcenter.business.Role; +import fr.paris.lutece.plugins.appcenter.business.RoleHome; import fr.paris.lutece.plugins.appcenter.business.User; +import fr.paris.lutece.plugins.appcenter.business.UserApplicationRole; import fr.paris.lutece.plugins.appcenter.business.UserApplicationRoleHome; import fr.paris.lutece.plugins.appcenter.business.UserHome; import fr.paris.lutece.plugins.appcenter.business.UserInfos; +import fr.paris.lutece.portal.business.rbac.RBACHome; +import fr.paris.lutece.portal.business.rbac.RBACRole; import fr.paris.lutece.portal.service.security.LuteceUser; import fr.paris.lutece.portal.service.security.SecurityService; import fr.paris.lutece.portal.service.security.UserNotSignedException; @@ -47,11 +54,16 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; + /** * UserService */ @@ -339,5 +351,34 @@ static T getDataSubset( String strUserInfosJson, String strDataSubsetName, C return null; } + + /** + * Add RBACRole front to user + * @param user + * @param nIdApplication + */ + public static void addRBACRole ( User user, int nIdApplication ) + { + Map mapRoles = new HashMap<>(); + + user.setListUserApplicationRoles( UserApplicationRoleHome.getUserApplicationRolesListByIdUser( user.getId( ) ) ); + + if ( user.getListUserApplicationRoles( ) != null ) + { + user.setListUserApplicationRoles( user.getListUserApplicationRoles( ).stream( ) + .filter( userApplicationRole -> userApplicationRole.getIdApplication( ) == nIdApplication ).collect( Collectors.toList( ) ) ); + } + + for ( UserApplicationRole userApplicationRole : user.getListUserApplicationRoles( ) ) + { + Role role = RoleHome.findByPrimaryKey( userApplicationRole.getIdRole( ) ); + + RBACRole rbacRole = new RBACRole( "appcenter_" + role.getCode( ), role.getLabel( ) ); + + mapRoles.put( "appcenter_" + role.getCode( ), rbacRole ); + } + + user.setUserRoles( mapRoles ); + } } diff --git a/src/java/fr/paris/lutece/plugins/appcenter/web/DemandJspBean.java b/src/java/fr/paris/lutece/plugins/appcenter/web/DemandJspBean.java index 315af4f..46bc354 100644 --- a/src/java/fr/paris/lutece/plugins/appcenter/web/DemandJspBean.java +++ b/src/java/fr/paris/lutece/plugins/appcenter/web/DemandJspBean.java @@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletRequest; +import fr.paris.lutece.api.user.User; import fr.paris.lutece.plugins.appcenter.business.Application; import fr.paris.lutece.plugins.appcenter.business.ApplicationDatas; import fr.paris.lutece.plugins.appcenter.business.ApplicationHome; @@ -206,7 +207,7 @@ public String getManageDemands( HttpServletRequest request ) mapStates.put( Integer.toString( demand.getId( ) ), state ); Collection listAllActions = WorkflowService.getInstance( ).getActions( demand.getId( ), - Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, getUser( ) ); + Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, (User) getUser( ) ); Collection listActions = new ArrayList<>( ); for (fr.paris.lutece.plugins.workflowcore.business.action.Action action : listAllActions ) @@ -385,7 +386,7 @@ public String getTaskForm( HttpServletRequest request ) Application application = ApplicationHome.findByPrimaryKey( demand.getIdApplication( ) ); String strHtmlTasksForm = WorkflowService.getInstance( ) - .getDisplayTasksForm( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, request, getLocale( ) ); + .getDisplayTasksForm( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, request, getLocale( ), getUser( ) ); Map model = getModel( ); model.put( MARK_DEMAND, demand ); @@ -417,7 +418,7 @@ public String getViewHistory( HttpServletRequest request ) int nIdWorkflow = DemandTypeService.getIdWorkflow( demand.getDemandType( ) ); String strHistoryHtml = WorkflowService.getInstance( ).getDisplayDocumentHistory( demand.getId( ), Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, request, - request.getLocale( ) ); + request.getLocale( ), getUser( ) ); // Aplication Application application = ApplicationHome.findByPrimaryKey( demand.getIdApplication( ) ); @@ -451,8 +452,8 @@ public String doProcessAction( HttpServletRequest request ) { return redirect( request, VIEW_TASK_FORM, PARAMETER_ID_DEMAND, nIdDemand, PARAMETER_ID_ACTION, nIdAction ); } - - WorkflowService.getInstance( ).doProcessAction( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, getLocale( ), true ); + + WorkflowService.getInstance( ).doProcessAction( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, getLocale( ), true, getUser( ) ); return redirectView( request, VIEW_MANAGE_DEMANDS ); } @@ -471,13 +472,13 @@ public String doSaveTaskForm( HttpServletRequest request ) Integer nIdDemand = request.getParameter( PARAMETER_ID_DEMAND ) != null ? Integer.parseInt( request.getParameter( PARAMETER_ID_DEMAND ) ) : null; Integer nIdAction = request.getParameter( PARAMETER_ID_ACTION ) != null ? Integer.parseInt( request.getParameter( PARAMETER_ID_ACTION ) ) : null; - if ( WorkflowService.getInstance( ).canProcessAction( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, false ) ) + if ( WorkflowService.getInstance( ).canProcessAction( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, false, getUser( ) ) ) { try { String strError = WorkflowService.getInstance( ) - .doSaveTasksForm( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, getLocale( ) ); + .doSaveTasksForm( nIdDemand, Demand.WORKFLOW_RESOURCE_TYPE, nIdAction, -1, request, getLocale( ), getUser( ) ); if ( strError != null ) { addError( strError ); diff --git a/webapp/WEB-INF/templates/admin/plugins/appcenter/manageappcenter_tabs.html b/webapp/WEB-INF/templates/admin/plugins/appcenter/manageappcenter_tabs.html index 751bdcd..e487530 100644 --- a/webapp/WEB-INF/templates/admin/plugins/appcenter/manageappcenter_tabs.html +++ b/webapp/WEB-INF/templates/admin/plugins/appcenter/manageappcenter_tabs.html @@ -1,7 +1,7 @@ <#macro tabs2 tab > <@tabs> - <@listTabs> -
  • class="active"> + <@tabList> +
  • class="active"> #i18n{appcenter.manage_demands.pageTitle}
  • class="active"> @@ -25,6 +25,6 @@
  • class="active"> #i18n{appcenter.manage_organizations.pageTitle}
  • - +