cancel
Showing results for 
Search instead for 
Did you mean: 

Pb droit web script

thomasberment
Champ in-the-making
Champ in-the-making
Bonjour, j'ai un petit soucis au niveau de mon web script :

if(serviceRegistry.getAuthorityService().getAuthoritiesForUser(theUserName) != null){
         Set<String> theSet = serviceRegistry.getAuthorityService().getAuthoritiesForUser(theUserName);
         if ((theSet.size() < 1) || (theSet.size() > 2)){
            this.getLogger().logTechnicalError(EnumTraitementMetierLevel.ERREUR.getCode(), "L'utilisateur est dans plusieurs groupes : " + theSet.size());
            return "";
         }else{
            String[] myElt = new String[Constantes.NB_MAX_GROUP_PER_USER];
            int i = 0;
            String theGroup = "";
            Iterator<String> it = theSet.iterator();
            while (it.hasNext()) {
                myElt[i] = (String) it.next();
                i++;
            }
            for (int j=0;j<myElt.length;j++){
               if (!Constantes.THE_GROUP_EVERYONE.equals(myElt[j])){
                  theGroup = myElt[j].substring(Constantes.INT_COUNT_WORD_GROUP);   
               }
            }
            return theGroup;
         }
      }

Il me permet de récupérer le groupe d'un utilisateur. Seulement ce web script doit être appelé par des utilisateurs communs. Lorsque je fait des tests j'obtient : "Access Denied.  You do not have the appropriate permissions to perform this operation."
Avec mon admin je peux sans pb avoir le groupe.

Je cherche une solution pour passer outre ce problème de droit, (session admin, …).

Pouvez-vous m'aider ?
Merci.
2 REPLIES 2

bertrandf
Champ on-the-rise
Champ on-the-rise
Vous pouvez exécuter votre code en tant qu'utilisateur System :


      AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>() {

         public Object doWork() throws Exception {
            // Votre code ici
            return null;

         }
      }, AuthenticationUtil.SYSTEM_USER_NAME);


Ca devrait vous donner qqch dans le genre :

      return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<String>() {

         public String doWork() throws Exception {

             if(serviceRegistry.getAuthorityService().getAuthoritiesForUser(theUserName) != null){
                   Set<String> theSet = serviceRegistry.getAuthorityService().getAuthoritiesForUser(theUserName);
                   if ((theSet.size() < 1) || (theSet.size() > 2)){
                      this.getLogger().logTechnicalError(EnumTraitementMetierLevel.ERREUR.getCode(), "L'utilisateur est dans plusieurs groupes : " + theSet.size());
                      return "";
                   }else{
                      String[] myElt = new String[Constantes.NB_MAX_GROUP_PER_USER];
                      int i = 0;
                      String theGroup = "";
                      Iterator<String> it = theSet.iterator();
                      while (it.hasNext()) {
                          myElt[i] = (String) it.next();
                          i++;
                      }
                      for (int j=0;j<myElt.length;j++){
                         if (!Constantes.THE_GROUP_EVERYONE.equals(myElt[j])){
                            theGroup = myElt[j].substring(Constantes.INT_COUNT_WORD_GROUP);  
                         }
                      }
                      return theGroup;
                   }
                }
            
            return "";

         }
      }, AuthenticationUtil.SYSTEM_USER_NAME);

thomasberment
Champ in-the-making
Champ in-the-making
Merci Bertrand pour cette solution. Après quels tests cela semble bien fonctionner …

Pour ceux que ça intéresse je redonne ma class entièrement (elle permet de retrouver le groupe d'un utilisateur):

package com.ft.edossier.alfresco.service;

import java.util.Iterator;
import java.util.Set;

import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.ServiceRegistry;

import com.ft.edossier.alfresco.log.ILogger;
import com.ft.edossier.alfresco.log.FTLogger.EnumTraitementMetierLevel;
import com.ft.edossier.alfresco.utils.Constantes;


/**
*
* @author tBerment
*
*/
public class ServiceGroupeUser extends ServiceModel implements IServiceGroupeUser{

   private ServiceRegistry serviceRegistry;

   public String recupGroupeUtilisateur(String theUserName) throws Exception {
      final ILogger myLog = this.getLogger();
      final String myUserName = theUserName;

      return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<String>() {
         public String doWork() throws Exception {
            if(serviceRegistry.getAuthorityService().getAuthoritiesForUser(myUserName) != null){
               Set<String> theSet = serviceRegistry.getAuthorityService().getAuthoritiesForUser(myUserName);
               if ((theSet.size() < 1) || (theSet.size() > 2)){
                  myLog.logTechnicalError(EnumTraitementMetierLevel.ERREUR.getCode(), "L'utilisateur est dans plusieurs groupes : " + theSet.size());
                  return "";
               }else{
                  String[] myElt = new String[Constantes.NB_MAX_GROUP_PER_USER];
                  int i = 0;
                  String theGroup = "";
                  Iterator<String> it = theSet.iterator();
                  while (it.hasNext()) {
                     myElt[i] = (String) it.next();
                     i++;
                  }
                  for (int j=0;j<myElt.length;j++){
                     if (!Constantes.THE_GROUP_EVERYONE.equals(myElt[j])){
                        theGroup = myElt[j].substring(Constantes.INT_COUNT_WORD_GROUP);  
                     }
                  }
                  return theGroup;
               }
            }
            else{
               myLog.logTechnicalError(EnumTraitementMetierLevel.ERREUR.getCode(), "L'utilisateur n'éxiste pas dans Alfresco");
               return "";
            }
         }
      }, AuthenticationUtil.SYSTEM_USER_NAME);
   }

   public ServiceRegistry getServiceRegistry() {
      return serviceRegistry;
   }

   public void setServiceRegistry(ServiceRegistry serviceRegistry) {
      this.serviceRegistry = serviceRegistry;
   }
}