cancel
Showing results for 
Search instead for 
Did you mean: 

Error de permisos en getMembers

rafabono_9703
Champ in-the-making
Champ in-the-making
Buenas tardes, expongo mi problema. Tengo un webscript que me devuelve los usuarios pertenecientes a un grupo dado. En la autenticación estoy utilizando <authentication>user</authentication>. El script funciona correctamente, pero para algunos grupos me escupe el siguiente error:

500 Description:   Un error en el servidor HTTP, el cual le ha impedido cumplir con la solicitud.

Message:   09246007631 Wrapped Exception (with status template): 09246007630 Failed to execute script '/org/alfresco/sample/prueba.post.js (in repository store workspace://SpacesStore/Empresa/Diccionario de datos/Web Scripts)': 09246007629 Acceso denegado. No tiene los permisos apropiados para realizar esta operación.
   
Exception:   net.sf.acegisecurity.AccessDeniedException - Access Denied

Sólo me ocurre con unos pocos grupos. De hecho, si me autentico con un usuario administrador, funciona correctamente para todos los grupos.
La línea del script que hace que lance el error es cuando quiero obtener el listado de usuarios:

lista = people.getMembers(grupoObtenido, false);

He estado analizando los grupos, comparando uno que da error con otro que funciona correctamente, pero no encuentro nada. Lo achaco a una posible corrupción del grupo.

Añado el código completo del js:

var nombregrupo = formdata.fields[0].value;
nombregrupo = "" + nombregrupo;
nombregrupo = nombregrupo.replace(/\s+/g,"")
var groupPrefix="GROUP_";
//Creamos el log que devolveremos
var logFile = userhome.childByNamePath("documento_salida.txt");
if (logFile == null)
{
  logFile = userhome.createFile("documento_salida.txt");
  logFile.properties.encoding = "UTF-8";
  logFile.properties.title = "documento_salida";
  logFile.properties.description = "salida del script";
}
logFile.content ="";
var log = "";
var log_html = "";

var grupoObtenido = people.getGroup(groupPrefix+nombregrupo);

if (grupoObtenido) {
    lista = people.getMembers(grupoObtenido, false);
    log+="El grupo: " + nombregrupo + " contiene a los siguientes usuarios:\n";
    log_html+="<tr><td><td>El grupo: " + nombregrupo + " contiene a los siguientes usuarios:\n";
    for(var i=0;i<lista.length;i++)
    {
   log+="Usuario: " +(lista[i]).properties["{http://www.alfresco.org/model/content/1.0}userName"] + " \n";
        log_html+="<tr><td><td>Usuario: " +(lista[i]).properties["{http://www.alfresco.org/model/content/1.0}userName"] + " \n";
    }  
}
else {
    log+="- El grupo: " + nombregrupo + " no existe.\n";
    log_html+="<tr><td><td>- El grupo: " + nombregrupo + " no existe.\n";
}

logFile.content=log;
logFile.save();
model.log = logFile;
model.text = log_html;


¿Alguna idea?
1 REPLY 1

rafabono_9703
Champ in-the-making
Champ in-the-making
Tras investigar un poco más, he detectado que el problema no estaba en el grupo en sí, sino en los usuarios que lo componían.

Uno de los usuarios tenía un permiso que no tenía el resto. De hecho, al eliminarlo del grupo, el script se ejecuta correctamente.

El permiso que posee es el siguiente (accediendo al nodo del usuario a través del explorador de nodos):


All   ROLE_OWNER   ALLOWED

Intento reproducir este problema con otro grupo, asignado dicho permiso a cualquier de los usuarios. Esto lo hago con javascript:

usuario.setPermission("All", "ROLE_OWNER");

Pruebo a lanzar el script con este grupo y obtenemos el mismo error (lo esperado). Por tanto lo que hago es quitar el permiso que le acabo de asignar:

usuario.removePermission("All", "ROLE_OWNER");

sin embargo, al lanzar el script, sigue dando error (a pesar de que a través del explorador de nodos todo aparece correcto). Se supone que todos los usuarios deben heredar el siguiente permiso: "Read", "GROUP_EVERYONE". Pero parece que al eliminar con javascript el permiso de ROLE_OWNER, se ha perdido dicha herencia. Por tanto le doy el permiso siguiente:

usuario.setPermission("Read", "GROUP_EVERYONE");

Y al lanzar el script, funciona correctamente.

Por tanto, no se trata de ningún problema de corrupción de grupos, sino de una asignación de permisos en un determinado usuario. Lo realmente raro es el efecto que provoca al poner y quitar el permiso "All" "ROLE_OWNER" con javascript, dejando al usuario sin el permiso heredado (posible bug?? o mal uso por mi parte??).

El cómo se ha realizado la asignación original sobre ese usuario también lo desconozco…