Index: main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions.js	(working copy)
@@ -27,7 +27,11 @@
 	 */
 	add: function(controller)
 	{
-		Ametys.plugins.cms.group.GroupActions.GroupEdition.act('new', controller.getPluginName());
+		var groupsManagerRole = controller.getInitialConfig('groups-manager-role');
+		var groupMessageTargetType = controller.getInitialConfig('group-message-target-type') || 'group';
+		var userMessageTargetType = controller.getInitialConfig('user-message-target-type') || 'user';
+		
+		Ametys.plugins.cms.group.GroupActions.GroupEdition.act('new', controller.getPluginName(), groupsManagerRole, userMessageTargetType, groupMessageTargetType);
 	},
 	
 	/**
@@ -39,7 +43,11 @@
 		var groupTarget = controller.getMatchingTargets()[0];
 		if (groupTarget != null)
 		{
-			Ametys.plugins.cms.group.GroupActions.GroupEdition.act('edit', controller.getPluginName());
+			var groupsManagerRole = controller.getInitialConfig('groups-manager-role');
+			var groupMessageTargetType = controller.getInitialConfig('group-message-target-type') || 'group';
+			var userMessageTargetType = controller.getInitialConfig('user-message-target-type') || 'user';
+			
+			Ametys.plugins.cms.group.GroupActions.GroupEdition.act('edit', controller.getPluginName(), groupsManagerRole, userMessageTargetType, groupMessageTargetType);
 		}
 	},
 	
@@ -54,7 +62,7 @@
 		{
 			Ametys.Msg.confirm("<i18n:text i18n:key='PLUGINS_CORE_GROUPS_HANDLE_DELETE' i18n:catalogue='plugin.core'/>",
 				"<i18n:text i18n:key='PLUGINS_CORE_GROUPS_DELETE_CONFIRM' i18n:catalogue='plugin.core'/>",
-				Ext.bind(this._doDelete, this, [groupTargets], 1),
+				Ext.bind(this._doDelete, this, [groupTargets, controller], 1),
 				this
 			);
 		}
@@ -64,12 +72,16 @@
 	 * Callback function invoked after the 'delete' confirm box is closed
 	 * @param {String} buttonId Id of the button that was clicked
 	 * @param {Ametys.message.MessageTarget[]} targets The message targets of the currently selected groups
+     * @param {Ametys.ribbon.element.ui.ButtonController} controller The controller calling this function 
 	 * @private
 	 */
-	_doDelete: function(buttonId, targets)
+	_doDelete: function(buttonId, targets, controller)
 	{
 		if (buttonId == 'yes')
 		{
+			var groupsManagerRole = controller.getInitialConfig('groups-manager-role');
+			var groupMessageTargetType = controller.getInitialConfig('group-message-target-type') || 'group';
+			
 			var ids = Ext.Array.map(targets, function(target) {
 				return target.getParameters().id;
 			});
@@ -79,12 +91,15 @@
 				Ametys.data.ServerComm.send({
 					plugin: 'core', 
 					url: 'groups/delete',
-					parameters: {id: ids},
+					parameters: {id: ids, groupsManagerRole: groupsManagerRole},
 					priority: Ametys.data.ServerComm.PRIORITY_MAJOR,
 					callback: {
 						handler: this._deleteCb,
 						scope: this,
-						arguments: [ids]
+						arguments: {
+							ids: ids, 
+							groupMessageTargetType: groupMessageTargetType
+						}
 					}
 				});
 			}
@@ -102,12 +117,13 @@
 			return;
 		}
 		
-		var ids = args[0];
+		var ids = args.ids;
+		var groupMessageTargetType = args.groupMessageTargetType;
 		var targets = [];
 		
 		Ext.Array.forEach(ids, function(id) {
 			targets.push({
-				type: 'group',
+				type: groupMessageTargetType,
 				parameters: {id: id}
 			});
 		});
@@ -125,19 +141,24 @@
 	addUsers: function(controller)
 	{
 		Ametys.helper.SelectUser.act({
-			callback: Ext.bind(this._addUsers, this)
+			callback: Ext.bind(this._addUsers, this, [controller], 1),
+			usersManagerRole: controller.getInitialConfig('users-manager-role')
 		});
 	},
 	
 	/**
 	 * Add the selected users to a group.
 	 * @param {Object} users The map of selected users to add (key: user id, value: user name).
+	 * @param {Ametys.ribbon.element.ui.ButtonController} controller The button's controller
 	 * @private
 	 */
-	_addUsers: function(users)
+	_addUsers: function(users, controller)
 	{
+		var groupMessageTargetType = controller.getInitialConfig('group-message-target-type') || 'group',
+		    groupsManagerRole = controller.getInitialConfig('groups-manager-role');
+		
 		var selectionMsg = Ametys.message.MessageBus.getCurrentSelectionMessage();
-		var target = selectionMsg ? selectionMsg.getTarget('group') : null;
+		var target = selectionMsg ? selectionMsg.getTarget(groupMessageTargetType) : null;
 		
 		if (!target)
 		{
@@ -152,7 +173,7 @@
 			objects.push(i);
 		}
 		
-		var params = {id: id, objects: objects};
+		var params = {id: id, objects: objects, groupsManagerRole: groupsManagerRole};
 		
 		Ametys.data.ServerComm.send({
 			plugin: 'core', 
@@ -162,14 +183,21 @@
 			callback: {
 				handler: this._addUsersCb,
 				scope: this,
-				arguments: [params.id]
+				arguments: {
+					id: params.id,
+					groupMessageTargetType: groupMessageTargetType
+				}
 			}
 		});
 	},
 	
 	/**
-	 * Callback function called after #_addUsers has been processed.
 	 * @private
+	 * Callback function called after #_addUsers has been processed.
+	 * @params {Object} response the server's response
+	 * @param {Object} args the callback arguments
+	 * @param {String} args.id the id of the group
+	 * @param {String} args.groupMessageTargetType the message target type of the group 
 	 */
 	_addUsersCb: function(response, args)
 	{
@@ -193,8 +221,8 @@
 		Ext.create('Ametys.message.Message', {
 			type: Ametys.message.Message.MODIFIED,
 			targets: [{
-				type: 'group',
-				parameters: {id: args[0], reloadUsers: true}
+				type: args.groupMessageTargetType,
+				parameters: {id: args.id, reloadUsers: true}
 			}]
 		});
 	},
@@ -207,21 +235,26 @@
 	{
 		Ametys.Msg.confirm("<i18n:text i18n:key='PLUGINS_CMS_GROUPS_DELUSERS_LABEL'/>", 
 			"<i18n:text i18n:key='PLUGINS_CMS_GROUPS_DELUSERS_CONFIRM'/>", 
-			this._removeUsers, 
+			Ext.bind(this._removeUsers, this, [controller], 1), 
 			this);
 	},
 	
 	/**
 	 * Remove the selected users from the group after confirmation.
 	 * @param {String} buttonId Id of the button that was clicked
+	 * @param {Ametys.ribbon.element.ui.ButtonController} controller The button controller 
 	 * @private
 	 */
-	_removeUsers: function(buttonId)
+	_removeUsers: function(buttonId, controller)
 	{
 		if (buttonId == 'yes')
 		{
+			var groupMessageTargetType = controller.getInitialConfig('group-message-target-type') || 'group',
+			    userMessageTargetType = controller.getInitialConfig('user-message-target-type') || 'user',
+			    groupsManagerRole = controller.getInitialConfig('groups-manager-role');
+			
 			var selectionMsg = Ametys.message.MessageBus.getCurrentSelectionMessage();
-			var target = selectionMsg ? selectionMsg.getTarget('group') : null;
+			var target = selectionMsg ? selectionMsg.getTarget(groupMessageTargetType) : null;
 			
 			if (!target)
 			{
@@ -230,7 +263,7 @@
 			
 			var groupId = target.getParameters().id;
 			
-			var userTargets = target.getSubtargets('user');
+			var userTargets = target.getSubtargets(userMessageTargetType);
 			var logins = Ext.Array.map(userTargets, function(target) {
 				return target.getParameters().login;
 			});
@@ -242,13 +275,17 @@
 					url: 'groups/remove-users',
 					parameters: {
 						id: groupId,
-						objects: logins
+						objects: logins,
+						groupsManagerRole: groupsManagerRole
 					},
 					priority: Ametys.data.ServerComm.PRIORITY_MAJOR,
 					callback: {
 						handler: this._removeUsersCb,
 						scope: this,
-						arguments: [groupId]
+						arguments: {
+							id: groupId,
+							groupMessageTargetType: groupMessageTargetType
+						}
 					}
 				});
 			}
@@ -256,8 +293,12 @@
 	},
 	
 	/**
+	 * @private 
 	 * Callback function called after #_removeUsers has been processed.
-	 * @private
+	 * @params {Object} response the server's response
+	 * @param {Object} args the callback arguments
+	 * @param {String} args.id the id of the group
+	 * @param {String} args.groupMessageTargetType the message target type of the group 
 	 */
 	_removeUsersCb: function(response, args)
 	{
@@ -281,8 +322,8 @@
 		Ext.create('Ametys.message.Message', {
 			type: Ametys.message.Message.MODIFIED,
 			targets: [{
-				type: 'group',
-				parameters: {id: args[0], reloadUsers: true}
+				type: args.groupMessageTargetType,
+				parameters: {id: args.id, reloadUsers: true}
 			}]
 		});
 	}
Index: main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions/GroupEdition.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions/GroupEdition.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupActions/GroupEdition.js	(working copy)
@@ -37,16 +37,34 @@
 	 * @property {Ametys.window.DialogBox} _box The dialog box containing the group edition form.
 	 * @private
 	 */
-	
+	/**
+	 * @property {String} _groupsManagerRole The role of the groups manager
+	 * @private
+	 */
+	/**
+	 * @property {String} _userMessageTargetType The target type for users
+	 * @private
+	 */
+	/**
+	 * @property {String} _groupMessageTargetType The target type for groups
+	 * @private
+	 */
+
 	/**
 	 * Open dialog box to edit group information
 	 * @param {String} mode The mode ('new' or 'edit')
 	 * @param {String} pluginName The plugin name 
+	 * @param {String} role the groupŝ managers role
+	 * @param {String} userTargetType the target type for users
+	 * @param {String} groupTargetType  the target type for groups
 	 */
-	act: function (mode, pluginName)
+	act: function (mode, pluginName, role, userTargetType, groupTargetType)
 	{
 		this._mode = mode;
 		this._pluginName = pluginName || 'cms';
+		this._groupsManagerRole = role;
+		this._userMessageTargetType = userTargetType;
+		this._groupMessageTargetType = groupTargetType;
 		
 		// Delay initialized if needed.
 		this._delayedInitialize();
@@ -143,7 +161,7 @@
 		else
 		{
 			var selectionMsg = Ametys.message.MessageBus.getCurrentSelectionMessage();
-			var target = selectionMsg ? selectionMsg.getTarget('group') : null;
+			var target = selectionMsg ? selectionMsg.getTarget(this._groupMessageTargetType) : null;
 			
 			if (!target)
 			{
@@ -170,6 +188,8 @@
 		}
 		
 		var params = this._form.getValues();
+		params.groupsManagerRole = this._groupsManagerRole;
+			
 		var url = '';
 		
 		if (this._mode == 'new')
@@ -216,7 +236,7 @@
 			Ext.create('Ametys.message.Message', {
 				type: Ametys.message.Message.CREATED,
 				targets: [{
-					type: 'group',
+					type: this._groupMessageTargetType,
 					parameters: {id: id, name: args[1]}
 				}]
 			});
@@ -240,7 +260,7 @@
 			Ext.create('Ametys.message.Message', {
 				type: Ametys.message.Message.MODIFIED,
 				targets: [{
-					type: 'group',
+					type: this._groupMessageTargetType,
 					parameters: {id: args[0], name: args[1]}
 				}]
 			});
Index: main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupsTool.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupsTool.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/group/GroupsTool.js	(working copy)
@@ -62,7 +62,23 @@
 	 * See {@link Ametys.plugins.cms.group.GroupsTool.GroupUserEntry}
 	 * @private
 	 */
-
+	/**
+	 * @property {String} _groupsManagerRole The role of the groups manager
+	 * @private
+	 */
+	/**
+	 * @property {String} _usersManagerRole The role of the users manager
+	 * @private
+	 */
+	/**
+	 * @property {String} _userMessageTargetType The target type for users
+	 * @private
+	 */
+	/**
+	 * @property {String} _groupMessageTargetType The target type for groups
+	 * @private
+	 */
+	
 	/**
 	 * @inheritdoc
 	 */
@@ -75,6 +91,12 @@
 	{
 		this.callParent(arguments);
 		
+		// Set the role and the message target type
+		this._groupsManagerRole =  config['groups-manager-role'];
+		this._usersManagerRole = config['users-manager-role'];
+		this._groupMessageTargetType = config['group-message-target-type'] || 'group';
+		this._userMessageTargetType = config['user-message-target-type'] || 'user';
+		
 		// bus messages listeners
 		Ametys.message.MessageBus.on(Ametys.message.Message.CREATED, this._onMessageCreated, this);
 		Ametys.message.MessageBus.on(Ametys.message.Message.MODIFIED, this._onMessageEdited, this);
@@ -96,6 +118,7 @@
 			columns: [{header: "<i18n:text i18n:key='PLUGINS_CORE_GROUPS_LABEL' i18n:catalogue='plugin.core'/>", width: 330, dataIndex: 'name', renderer: this.self._renderGroupName, hideable: false}],
 			
 			listeners: {
+				
 				selectionchange: {fn: this._onGroupSelectionChange, scope: this}
 			}
 		});
@@ -153,13 +176,33 @@
 			},
 			
 			sortOnLoad: true,
-			sorters: [{property: 'name', direction:'ASC'}]
+			sorters: [{property: 'name', direction:'ASC'}],
+			
+			listeners: {
+				beforeload: {fn: this._onBeforeLoadGroups, scope: this}
+			}
 			
 		}, this.getGroupStoreConfig());
 		
 		return Ext.create('Ext.data.Store', storeConfig);
 	},
 	
+	
+	/**
+	 * Function called before loading the store
+	 * @param {Ext.data.Store} store The store
+	 * @param {Ext.data.operation.Operation} operation The object that will be passed to the Proxy to load the store
+	 * @param {Object} eOpts Event options
+	 * @private
+	 */
+	_onBeforeLoadGroups: function(store, operation, eOpts)
+	{
+		operation.setParams( operation.getParams() || {} );
+		operation.setParams( Ext.apply(operation.getParams(), {
+			groupsManagerRole: this._groupsManagerRole
+		}));
+	},
+	
 	/**
 	 * Returns the elements of configuration of group store to be overridden.
 	 * Override this function if you want to override the group store configuration.
@@ -232,6 +275,9 @@
 	 */
 	_onBeforeLoadUsers: function (store, operation)
 	{
+		var groupsManagerRole = this._groupsManagerRole
+		    usersManagerRole = this._usersManagerRole;
+		
 		operation.setParams( operation.getParams() || {} );
 		
 		if (!operation.getParams().groupID)
@@ -240,7 +286,9 @@
 			if (group)
 			{
 				operation.setParams(Ext.apply(operation.getParams(), {
-					groupID: group.getId()
+					groupID: group.getId(),
+					groupsManagerRole: groupsManagerRole,
+					usersManagerRole: usersManagerRole
 				}));
 			}
 		}
@@ -256,6 +304,9 @@
 	 */
 	_onGroupSelectionChange: function(model, selected, eOpts)
 	{
+		var groupsManagerRole = this._groupsManagerRole,
+			usersManagerRole = this._usersManagerRole;
+		
 		this._userGrid.getStore().removeAll();
 		
 		var group = selected[0];
@@ -263,7 +314,9 @@
 		{
 			this._userGrid.getStore().load({
 				params: {
-					groupID: group.getId()
+					groupID: group.getId(),
+					groupsManagerRole: groupsManagerRole,
+					usersManagerRole: usersManagerRole
 				}
 			});
 		}
@@ -291,11 +344,13 @@
 		var targets = [];
 		
 		var users = this._userGrid.getSelectionModel().getSelection();
+		var userTargetType = this._userMessageTargetType;
 		var userTargets = [];
 		
+		
 		Ext.Array.forEach(users, function(user) {
 			userTarget = Ext.create('Ametys.message.MessageTarget', {
-				type: 'user',
+				type: userTargetType,
 				parameters: {login: user.getId()}
 			});
 			
@@ -307,7 +362,7 @@
 		if (group)
 		{
 			var groupTarget = {
-				type: 'group',
+				type: this._groupMessageTargetType,
 				parameters: {
 					id: group.getId(),
 					name: group.get('name')
@@ -331,7 +386,7 @@
 	 */
 	_onMessageCreated: function(message)
 	{
-		var groupTarget = message.getTarget('group');
+		var groupTarget = message.getTarget(this._groupMessageTargetType);
 		if (groupTarget != null)
 		{
 			var id = groupTarget.getParameters().id;
@@ -347,7 +402,7 @@
 	 */
 	_onMessageEdited: function(message)
 	{
-		var groupTarget = message.getTarget('group');
+		var groupTarget = message.getTarget(this._groupMessageTargetType);
 		
 		if (groupTarget != null)
 		{
@@ -377,7 +432,7 @@
 	 */
 	_onMessageDeleted: function(message)
 	{
-		var groupTargets = message.getTargets('group');
+		var groupTargets = message.getTargets(this._groupMessageTargetType);
 		
 		// delete each select groups
 		Ext.Array.forEach(groupTargets, function(target) {
@@ -442,6 +497,9 @@
 	_updateUsersGroup: function(id)
 	{
 		var group = this._groupGrid.getStore().getById(id);
+		var groupsManagerRole = this._groupsManagerRole
+	    	usersManagerRole = this._usersManagerRole;
+		
 		
 		if (this._groupGrid.getSelectionModel().isSelected(group))
 		{
@@ -449,7 +507,9 @@
 			
 			this._userGrid.getStore().load({
 				params: {
-					groupID: group.getId()
+					groupID: group.getId(),
+					groupsManagerRole: groupsManagerRole,
+					usersManagerRole: usersManagerRole
 				}
 			});
 		}
Index: main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions.js	(working copy)
@@ -22,16 +22,6 @@
 	singleton: true,
 	
 	/**
-	 * Template function to add additional parameters to the requests.
-	 * @return {Object} Additional parameters to send with the server requests.
-	 * @template
-	 */
-	getAdditionalParams: function()
-	{
-		return {};
-	},
-	
-	/**
 	 * Override this function to change the target configuration object send by
 	 * the user edition actions.
 	 * @param {String} login the login of the user.
@@ -39,10 +29,7 @@
 	 */
 	getTargetConfig: function(login)
 	{
-		return {
-			type: 'user',
-			parameters: {id: login}
-		}
+		return
 	},
 	
 	/**
@@ -51,7 +38,10 @@
 	 */
 	add: function(controller)
 	{
-		Ametys.plugins.cms.user.UserActions.UserEdition.act('new', controller.getPluginName())
+		var usersManagerRole = controller.getInitialConfig('users-manager-role');
+		var messageTargetType = controller.getInitialConfig('message-target-type') || 'user';
+		
+		Ametys.plugins.cms.user.UserActions.UserEdition.act('new', controller.getPluginName(), null, usersManagerRole, messageTargetType)
 	},
 	
 	/**
@@ -63,7 +53,10 @@
 		var userTarget = controller.getMatchingTargets()[0];
 		if (userTarget != null)
 		{
-			Ametys.plugins.cms.user.UserActions.UserEdition.act('edit', controller.getPluginName(), userTarget.getParameters().id);
+			var usersManagerRole = controller.getInitialConfig('users-manager-role');
+			var messageTargetType = controller.getInitialConfig('message-target-type') || 'user';
+			
+			Ametys.plugins.cms.user.UserActions.UserEdition.act('edit', controller.getPluginName(), userTarget.getParameters().id, usersManagerRole, messageTargetType)
 		}
 	},
 	
@@ -78,7 +71,7 @@
 		{
 			Ametys.Msg.confirm("<i18n:text i18n:key='PLUGINS_CORE_USERS_HANDLE_DEL_TITLE' i18n:catalogue='plugin.core'/>",
 				"<i18n:text i18n:key='PLUGINS_CORE_USERS_HANDLE_DEL_MULTI_PROMPT' i18n:catalogue='plugin.core'/>",
-				Ext.bind(this._doDelete, this, [userTargets], 1),
+				Ext.bind(this._doDelete, this, [userTargets, controller], 1),
 				this
 			);
 		}
@@ -88,12 +81,16 @@
 	 * Callback function invoked after the 'delete' confirm box is closed
 	 * @param {String} buttonId Id of the button that was clicked
 	 * @param {Ametys.message.MessageTarget[]} targets The message targets of the currently selected users
+	 * @param {Ametys.ribbon.element.ui.ButtonController} controller The controller calling this function 
 	 * @private
 	 */
-	_doDelete: function(buttonId, targets)
+	_doDelete: function(buttonId, targets, controller)
 	{
 		if (buttonId == 'yes')
 		{
+			var usersManagerRole = controller.getInitialConfig('users-manager-role');
+			var messageTargetType = controller.getInitialConfig('message-target-type') || 'user';
+			
 			var ids = Ext.Array.map(targets, function(target) {
 				return target.getParameters().id;
 			});
@@ -101,8 +98,9 @@
 			if (ids.length > 0)
 			{
 				var params = Ext.apply({
-					login: ids
-				}, this.getAdditionalParams());
+					login: ids,
+					usersManagerRole: usersManagerRole
+				});
 				
 				Ametys.data.ServerComm.send({
 					plugin: 'core', 
@@ -112,7 +110,7 @@
 					callback: {
 						handler: this._deleteCb,
 						scope: this,
-						arguments: {logins: ids}
+						arguments: {logins: ids, messageTargetType: messageTargetType}
 					}
 				});
 			}
@@ -134,7 +132,10 @@
 		var targets = [];
 		
 		Ext.Array.forEach(logins, function(login) {
-			targets.push(this.getTargetConfig(login));
+			targets.push({
+					type: args.messageTargetType,
+					parameters: {id: login}
+				});
 		}, this);
 		
 		Ext.create('Ametys.message.Message', {
Index: main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions/UserEdition.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions/UserEdition.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/user/UserActions/UserEdition.js	(working copy)
@@ -33,6 +33,14 @@
 	 * @property {String} _pluginName The plugin name used to construct the path of icon images.
 	 * @private
 	 */
+	/**
+	 * @property {String} _usersManagerRole The role of the users manager
+	 * @private
+	 */
+	/**
+	 * @property {String} _messageTargetType The target type for users
+	 * @private
+	 */
 	
 	/**
 	 * @property {String} _FIELD_PREFIX the prefix of the field names
@@ -45,12 +53,16 @@
 	 * Open dialog box to edit user information
 	 * @param {String} mode The mode ('new' or 'edit')
 	 * @param {String} pluginName The plugin name 
-	 * @param {String} login The user's login. Can be null in 'new' mode 
+	 * @param {String} login The user's login. Can be null in 'new' mode
+	 * @param {String} role the users managers role
+	 * @param {String} targetType the target type 
 	 */
-	act: function (mode, pluginName, login)
+	act: function (mode, pluginName, login, role, targetType)
 	{
 		this._mode = mode;
 		this._pluginName = pluginName || 'cms';
+		this._usersManagerRole = role;
+		this._messageTargetType = targetType;
 		
 		// Delay initialized if needed.
 		this._delayedInitialize();
@@ -141,7 +153,8 @@
 	 */
 	_getFormItems: function()
 	{
-		var params = Ext.apply({}, Ametys.plugins.cms.user.UserActions.getAdditionalParams());
+		var params = {};
+		params.usersManagerRole = this._usersManagerRole; 
 		
 		var response = Ametys.data.ServerComm.send({
 			plugin: 'core', 
@@ -193,7 +206,10 @@
 		}
 		else if (login != null)
 		{
-			var params = Ext.apply({login: login}, Ametys.plugins.cms.user.UserActions.getAdditionalParams());
+			var params = {
+					login: login,
+					usersManagerRole: this._usersManagerRole
+				};
 			
 			var response = Ametys.data.ServerComm.send({
 				plugin: 'core', 
@@ -250,9 +266,8 @@
 		// Add login if disabled
 		params.field_login = this._form.findField('field_login').getValue();
 		params.mode = this._mode;
+		params.usersManagerRole = this._usersManagerRole;
 		
-		Ext.apply(params, Ametys.plugins.cms.user.UserActions.getAdditionalParams());
-
 		Ametys.data.ServerComm.send({
 			plugin: 'core', 
 			url: 'users/edit', 
@@ -292,7 +307,10 @@
 		else
 		{
 			var login = this._form.findField(this._FIELD_PREFIX + 'login').getValue();
-			var target = Ametys.plugins.cms.user.UserActions.getTargetConfig(login);
+			var target = {
+					parameters: {id: login},
+					type: this._messageTargetType
+			};
 			
 			if (this._mode == 'new')
 			{
Index: main/plugin-cms/resources/js/Ametys/plugins/cms/user/UsersTool.js
===================================================================
--- main/plugin-cms/resources/js/Ametys/plugins/cms/user/UsersTool.js	(revision 32584)
+++ main/plugin-cms/resources/js/Ametys/plugins/cms/user/UsersTool.js	(working copy)
@@ -66,6 +66,14 @@
 	 * @property {String} _previousSearchValue The value of the search field used during the last load request.
 	 * @private
 	 */
+	/**
+	 * @property {String} _usersManagerRole the role of the users manager
+	 * @private
+	 */
+	/**
+	 * @property {String} _messageTargetType the message target type
+	 * @private
+	 */
 	
 	/**
 	 * @inheritdoc
@@ -79,6 +87,10 @@
 	{
 		this.callParent(arguments);
 		
+		// Set the role and the message target type
+		this._usersManagerRole =  config['users-manager-role'];
+		this._messageTargetType = config['message-target-type'] || 'user';
+		
 		// Listening to some bus messages.
 		Ametys.message.MessageBus.on(Ametys.message.Message.CREATED, this._onMessageCreated, this);
 		Ametys.message.MessageBus.on(Ametys.message.Message.MODIFIED, this._onMessageEdited, this);
@@ -202,11 +214,12 @@
 	sendCurrentSelection: function()
 	{
 		var selection = this._grid.getSelectionModel().getSelection();
+		var messageTargetType = this._messageTargetType;
 		var targets = [];
 		
 		Ext.Array.forEach(selection, function(record) {
 			targets.push({
-				type: 'user',
+				type: messageTargetType,
 				parameters: {id: record.getId()}
 			})
 		});
@@ -268,6 +281,7 @@
 	{
 		operation.setParams( operation.getParams() || {} );
 		operation.setParams( Ext.apply(operation.getParams(), {
+			usersManagerRole: this._usersManagerRole,
 			criteria: this._getSearchFieldValue(),
 			limit: this.self.RESULT_LIMIT
 		}));
@@ -292,8 +306,7 @@
 	 */
 	_onMessageCreated: function(message)
 	{
-		var userTarget = message.getTarget(/^user$/, 1);
-		
+		var userTarget = message.getTarget(new RegExp('^' + this._messageTargetType + '$'), 1);
 		if (userTarget)
 		{
 			this._addUser(userTarget.getParameters().id);
@@ -332,7 +345,7 @@
 	{
 		if (message != null && message.getParameters().major === true)
 		{
-			var userTarget = message.getTarget(/^user$/, 1);
+			var userTarget = message.getTarget(new RegExp('^' + this._messageTargetType + '$'), 1);
 			if (userTarget)
 			{
 				this._updateUser(userTarget.getParameters().id);
@@ -372,18 +385,20 @@
 	 * @private
 	 * Get informations about a user
 	 * @param {String} id The identifier (login) of the user
-	 * @return {Object} The information about the user or null if an error occured. Informations are:
+	 * @return {Object} The information about the user or null if an error occurred. Informations are:
+	 * 
 	 *   - String id The identifier
 	 *   - String lastname The lastname. Can be empty.
 	 *   - String firstname The firstname. Can be empty.
 	 *   - String email The email. Can be empty.
+	 *   
 	 */
 	_getUserInfo: function(id)
 	{
 		var response = Ametys.data.ServerComm.send({
 			plugin: 'core', 
 			url: 'users/info', 
-			parameters: {login: id},
+			parameters: {login: id, usersManagerRole: this._usersManagerRole},
 			priority: Ametys.data.ServerComm.PRIORITY_SYNCHRONOUS
 		});
 		
@@ -407,7 +422,7 @@
 	 */
 	_onMessageDeleted: function(message)
 	{
-		var userTargets = message.getTargets(/^user$/, 1);
+		var userTargets = message.getTargets(new RegExp('^' + this._messageTargetType + '$'), 1);
 		
 		// delete each select users
 		Ext.Array.forEach(userTargets, function(target) {
@@ -416,6 +431,7 @@
 	},
 	
 	/**
+	 * @private
 	 * Remove a user record
 	 * @param {String} id The id (login) of the user to remove
 	 */
