viernes, 14 de junio de 2013

Restringir usuarios mostrados en el widget "user suggestion" del manejador de contenido Nuxeo

Una manera de restringir los usuarios desplegados en el widget user suggestion de nuxeo, podría ser la siguiente:

1-Sobreescribir el widget single_user_suggestion_widget_template.xhtml

-En modo edicion del widget, crear otra variable llamada userGroup:
   
El valor de esta variable se la pasaremos mediante custom properties del widget en nuxeo studio:
-Localizar el rich:suggestionBox component y realizar los siguientes cambios:
suggestionAction="#{myUserSuggestionActions.getSuggestions}"
Agregar otro f:param

Dentro de
tambien agregar el f:param

Dentro de
 
agregar:

2-Sobre-escribir el método de busqueda localizado en el seam component UserSuggestionActions. Cree otra clase y nombre mi componente así: myUserSuggestionActions

-Agregar estas variables a la clase:
	@RequestParameter
	protected String userSuggestionGroup;

	protected String cachedUserSuggestionGroup;

	public static final String WILDCARD_ALL_USER_GROUP = "*.*";
-Sobreescribir el método getUserSuggestions
	public List getUserSuggestions(Object input)
			throws ClientException {
		try {
			String searchPattern = (String) input;
			List users = new ArrayList();
			if(searchPattern.trim().equals(WILDCARD_ALL_USER_GROUP)){
				return getListUsersByWildCard();
			}
			users = userManager.searchUsers(searchPattern);
			if (userSuggestionGroup != null && !userSuggestionGroup.equals("")) {
				List usersByRol = new ArrayList();
				DataModel dataModel = null;
				for (DocumentModel doc : users) {
					dataModel = doc.getDataModel(userConfig.schemaName);
					NuxeoPrincipal principal = userManager
							.getPrincipal((String) dataModel
									.getValue(userConfig.nameKey));
					if (principal != null
							&& principal.isMemberOf(userSuggestionGroup)) {
						usersByRol.add(doc);
					}
				}
				return usersByRol;
			} else {
				return users;
			}
		} catch (SizeLimitExceededException e) {
			addSearchOverflowMessage();
			return Collections.emptyList();
		} catch (Exception e) {
			throw new ClientException("error searching for principals", e);
		}
	}
-Agregar los otros métodos locales
	private List getListUsersByWildCard() throws ClientException{
		List users = new ArrayList();
		if (userSuggestionGroup != null && !userSuggestionGroup.equals("")) {
			List listUsernames = userManager.getUsersInGroup(userSuggestionGroup);			
			if(listUsernames!= null && listUsernames.size() >= 0){
				for (String id : listUsernames) {
					users.add(userManager.getUserModel(id));
				}
			}					
		}
		return users;		
	}
Si se utiliza un wildcard en conjunto con el nuevo parámetro del widget userGroup, entonces el widget mostrara todos los usuarios que pertenezcan al grupo pasado como parámetro. El wilcard utilizado es *.*