Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 52 additions & 1 deletion src/java/fr/paris/lutece/plugins/appcenter/business/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<String, UserRole> _roles = new HashMap<>( );

/**
* Returns the Id
*
Expand Down Expand Up @@ -109,4 +119,45 @@ public void setUserInfos( String userInfos )
_userInfos = userInfos;
}

@Override
public Map<String, UserRole> getUserRoles() {
return _roles;
}

public void setUserRoles( Map<String, UserRole> 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<String> getUserWorkgroups() {
// TODO Auto-generated method stub
return null;
}

@Override
public String getRealm() {
// TODO Auto-generated method stub
return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,16 @@
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;
import java.io.IOException;
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;
Expand All @@ -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 <T extends Demand> List<T> getDemandsListByApplicationAndType( Application application, String strDemandType, Class<T> demandClass )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,34 @@
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;
import fr.paris.lutece.util.ReferenceList;
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
*/
Expand Down Expand Up @@ -339,5 +351,34 @@ static <T> 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<String, UserRole> 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 );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -206,7 +207,7 @@ public String getManageDemands( HttpServletRequest request )
mapStates.put( Integer.toString( demand.getId( ) ), state );

Collection<fr.paris.lutece.plugins.workflowcore.business.action.Action> listAllActions = WorkflowService.getInstance( ).getActions( demand.getId( ),
Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, getUser( ) );
Demand.WORKFLOW_RESOURCE_TYPE, nIdWorkflow, (User) getUser( ) );
Collection<fr.paris.lutece.plugins.workflowcore.business.action.Action> listActions = new ArrayList<>( );

for (fr.paris.lutece.plugins.workflowcore.business.action.Action action : listAllActions )
Expand Down Expand Up @@ -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<String, Object> model = getModel( );
model.put( MARK_DEMAND, demand );
Expand Down Expand Up @@ -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( ) );
Expand Down Expand Up @@ -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 );
}
Expand All @@ -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 );
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<#macro tabs2 tab >
<@tabs>
<@listTabs>
<li <#if tab="demand">class="active"</#if>>
<@tabList>
<li <#if tab="demand">class="active"</#if>>
<a href="jsp/admin/plugins/appcenter/ManageDemands.jsp">#i18n{appcenter.manage_demands.pageTitle}</a>
</li>
<li <#if tab="application">class="active"</#if>>
Expand All @@ -25,6 +25,6 @@
<li <#if tab="organization">class="active"</#if>>
<a href="jsp/admin/plugins/appcenter/ManageOrganizations.jsp">#i18n{appcenter.manage_organizations.pageTitle}</a>
</li>
</@listTabs>
</@tabList>
</@tabs>
</#macro>