Gestion des utilisateurs et des groupes

La SPI PUMA fournit des interfaces pour accéder aux profils d'un Utilisateur ou Groupe du portail.

La SPI PUMA est utilisée pour rechercher, créer, modifier et supprimer les utilisateurs et les groupes. De même, les informations de profil relatives à l'utilisateur qui est actuellement connecté peuvent être extraites. Les interfaces Utilisateur et Groupe renvoyées par le SPI héritent de la méthode getObjectID() de l'interface com.ibm.portal.Identifiable du SPI modèle. Cette méthode est utilisée pour obtenir l'ID objet qui identifie de manière unique une ressource ; dans ce cas, il s'agit d'un utilisateur ou d'un groupe dans le registre d'utilisateurs du portail. Les objets fournisseur suivants permettent d'accéder aux objets Utilisateur et Groupe.

PumaProfile
Contient des méthodes qui permettent d'accéder en lecture seule aux identificateurs et aux attributs Utilisateur et Groupe. Vous pouvez utiliser cette interface afin d'obtenir l'objet Utilisateur pour l'utilisateur courant.
PumaLocator
Contient des méthodes permettant de rechercher les objets Utilisateur et Groupe. Vous pouvez utiliser cette interface pour obtenir une Liste d'objets Groupe pour tous les groupes dont l'utilisateur courant est membre. A partir de la version 7.0 d'HCL Portal, la pagination est prise en charge. Cela signifie que l'ensemble de résultats est divisé en sous-ensembles (pages) et qu'un itérateur spécial peut être utilisé pour accéder aux pages.
PumaController
contient des méthodes permettant de créer ou de supprimer des Utilisateurs et des Groupes et de modifier les profils et l'appartenance de Utilisateur et Groupe.
PumaEnvironment
Contient des méthodes permettant d'extraire des principaux virtuels, d'accéder aux propriétés générales pour la gestion des utilisateurs et contient également une méthode permettant d'ignorer le contrôle d'accès pour la couche de gestion des groupes et des utilisateurs.
Avant de pouvoir utiliser ces objets fournisseur, le portlet doit extraire l'interface d'accueil appropriée selon le type d'application.
Portlet standard
com.ibm.portal.um.portletservice.PumaHome
Portlet IBM
com.ibm.portal.um.portletservice.legacy.PumaHome
Application de portail (par exemple, thème ou habillage)
com.ibm.portal.um.PumaHome

Des exemples illustrant la façon dont ces interfaces sont requises figurent dans la documentation Javadoc associée. L'exemple suivant présente la façon dont un portlet standard obtient l'identificateur d'un Utilisateur en tant que Chaîne.


PortletServiceHome psh;
try{
   javax.naming.Context ctx = new javax.naming.InitialContext();
   psh = (PortletServiceHome) 
         ctx.lookup("portletservice/com.ibm.portal.um.portletservice.PumaHome");
   if (psh != null){
      PumaHome service = (PumaHome) psh.getPortletService(PumaHome.class);
      PumaProfile pp = service.getProfile(request);
      User user = pp.getCurrentUser();
      String user_objid = pp.getIdentifier(user);
   }
}
catch (PumaException pe){
   // ... error handling ...
} catch(javax.naming.NameNotFoundException ex) {
   // ... error handling ...
} catch(javax.naming.NamingException ex) {
   // ... error handling ...
}

Remarque : Etant donné que PumaProfile, PumaLocator et PumaController stockent l'utilisateur en cours, vous ne devez pas stocker ces objets dans une session ou ailleurs. Mais vous pouvez les extraire de PumaHome à chaque utilisation. PumaHome peut toutefois être stocké.
L'exemple ci-après démontre comment un portlet standard effectue une recherche standard pour les attributs de lecture et d'écriture :
List<User> usersStartingWithA = pumaLocator.findUsersByAttribute("uid", "a*");
// if no value for ibm-primaryEmail attribute is set, then set it
List<String> requestedAttributes = new ArrayList<String>(2);
requestedAttributes.add("uid");
requestedAttributes.add("primaryEmail");
for(User user: usersStartingWithA) {
Map<String, Object> attributes =
pumaProfile.getAttributes(user, requestedAttributes);
if (attributes.get("primaryEmail")==null
|| "".equals(attributes.get("ibm-primaryEmail"))){
pumaController.setAttributes(user, Collections.singletonMap(
"ibm-primaryEmail", attributes.get("uid")+"@ibm.com"));
}
}
L'exemple suivant indique comment effectuer une recherche paginée :
// create a properties map that requests 10 results per Page
Map<String, Object> pageProperties = new HashMap<String, Object>(2);
pageProperties.put(PumaLocator.RESULTS_PER_PAGE, 10);
PagingIterator<User> pageIter = pumaLocator.findUsersByAttribute(
"uid", "a*", pageProperties);
List<User> buffer = new ArrayList<User>(10);
do {
pageIter.getNextPage(buffer); //=> always has a first page
if (pageIter.getCurrentPageNumber()==0)
{
System.out.println("Total results: "+pageIter.getNumberOfTotalResults());
System.out.println("Total pages: "+pageIter.getNumberOfPages());
}
for (User aUser: buffer)
{ display(aUser);
}
} while (pageIter.hasNextPage());
// now jump to page 5
// => will throw NoSuchPageException if NumberOfPages < 6
List<User> result = pageIter.getPage(null, 5);