cancel
Showing results for 
Search instead for 
Did you mean: 

Grupos Web Script

eduandres01_994
Champ in-the-making
Champ in-the-making
Hola!!
Quiero grear grupos a través de un web script, tengo el siguiente cogigo:
<webscript>
  <shortname>Crear grupo</shortname>
  <description>Nuevo grupo en Alfresco</description>
  <url>/esoft/grupo?nombre={nombre}</url>
  <format default="xml"/>
  <authentication>user</authentication>
  <transaction>required</transaction>
</webscript>

var nuevo = null;
var grupoExiste = null;
var busca = people.getGroup(args.nombre);
if( busca == null)
{
   people.createGroup(null,args.nombre);
   busca = people.getGroup(args.nombre);
   nuevo = busca;
   model.nuevo = nuevo;
}
else
{
   grupoExiste = "Este grupo ya existe";
   model.grupoExiste = grupoExiste;
}

<#if nuevo??>
   <grupo>${nuevo.id}</grupo>
</#if>

<#if grupoExiste??>
   <grupo>${grupoExiste}</grupo>
</#if>

El web script crea el grupo pero a la hora de buscarlo me devulve un null, es mas si intento crear un grupo con el mismo nombre, el web script lo permite, pero igual en la consola de alfresco solo puede ver un  grupo con este nombre.
Qué más tengo que hacer para que el web scrip funcione bien y para que a la hora de buscarlo pueda encontrarlo?
9 REPLIES 9

ajv
Champ in-the-making
Champ in-the-making
Hola eduandres01!!

Te faltaba un mini-detalle  Smiley Very Happy
Cuando se realiza las búsquedas de grupos mediante el API JavaScript debes incluir el prefijo "GROUP_" (no ocurre lo mismo cuando se crean  :? )
Por tanto, el javascrript te debería quedar así:
    var nuevo = null;
    var grupoExiste = null;
    var busca = people.getGroup("GROUP_" + args.nombre);
    if( busca == null)
    {
       people.createGroup(null,args.nombre);
       busca = people.getGroup("GROUP_" + args.nombre);
       nuevo = busca;
       model.nuevo = nuevo;
    }
    else
    {
       grupoExiste = "Este grupo ya existe";
       model.grupoExiste = grupoExiste;
    }
Saludos y bienvenido al foro!!

eduandres01_994
Champ in-the-making
Champ in-the-making
Muchas gracias por la colaboracion, ese era el error, ahora funciona.
Que pena la molestia, ahora necesito otro favor, para crear ausuarios, tengo el siguiente web script

<webscript>
  <shortname>Crear un usuario</shortname>
  <description>Nuevo usuario en Alfresco</description>
  <url>/esoft/usuario?nombre={nombre}</url>
  <format default="xml"/>
  <authentication>user</authentication>
  <transaction>required</transaction>
</webscript>

var nuevo = null;
var usuarioExiste = null;
var busca = people.getPerson(args.nombre);
if( busca == null)
{
   people.createPerson(args.nombre);
   busca = people.getPerson(args.nombre);
   nuevo = busca;
   model.nuevo = nuevo;
}
else
{
   people.deletePerson(args.nombre);
   usuarioExiste = "Este usuario ya existe";
   model.usuarioExiste = usuarioExiste;
}

<#if nuevo??>
   <usuario>${nuevo.id}</usuario>
</#if>

<#if usuarioExiste??>
   <usuario>${usuarioExiste}</usuario>
</#if>

En efecto el web script funciona, crea el usuario, pero necesito saber como le asigno las demas propiedades al usuario ( password, correo, nombre, apellido, etc) ademas como lo agrego a un grupo?
ajv muchas gracias por tu colaboracion y perdona las molestias Smiley Surprisedops:

ajv
Champ in-the-making
Champ in-the-making
Buenas!!

Eso de createPerson es para la nueva versión Labs 3.0!! Hasta ahora no era posible crear usuarios desde el API Javascript, y me consta que era bastante solicitada.  Smiley Very Happy
Yo no la tengo instalada todavía, pero apostaría que es como el resto de modificaciones de propiedades:
       people.createPerson(args.nombre);
       busca = people.getPerson(args.nombre);
       busca.properties["cm:firstName"] = "adri";
       busca.properties["cm:lastName"] = "jim";
       busca.properties["cm:email"] = "adri@adri.com";
       busca.save();
       nuevo = busca;
       model.nuevo = nuevo;
Tendrás opción de modificar las propiedades de la persona…lo que no tengo muy claro (no sé como lo habran resuelto) es el tema del password.
Si no voy mal, no se almacenan en el store de workSpaces, sino en System. Al ser un tipo de contenido diferente (usr:user) y ser un nodo totalmente diferente al que acabas de crear, no sé como podrás acceder a ese nodo (ni siquiera sé si se habrá creado!). Por tanto, podrías crear a las personas, pero me parece que no podrán entrar…

Nota: En principio no sería necesario lanzar una búsqueda nada más crear el objeto, pues la función te lo devuelve:
busca = people.createPerson(args.nombre);
       busca.properties["cm:firstName"] = "adri";
       busca.properties["cm:lastName"] = "jim";
       busca.properties["cm:email"] = "adri@adri.com";
       busca.save();
       nuevo = busca;
       model.nuevo = nuevo;

Saludos!!

ajv
Champ in-the-making
Champ in-the-making
Se me olvidaba!!
Para vincular un usuario a un grupo en concreto puedes emplear la función:
people.addAuthority(grupo, usuario);
Donde ambos son los nodos que representan al grupo padre y al usuario, respectivamente.

Y que no te sepa mal cometer esos fallitos, que todos metemos la pata!  Smiley Very Happy
Hasta luego!

eduandres01_994
Champ in-the-making
Champ in-the-making
ajv Muchas gracias por tu colaboración, el web script funciona correctamente, pero tengo un problema, el usuario se crea correctamente con todas sus propiedades, pero a la hora de querer logearme con ese nuevo usuario no lo puedo hacer, que debo hacer?
Tambien necesito saber como asignar los permisos a los spaces desde un web script, permitiendo que algunos grupos tengan acceso a un space y otros no, Muchas gracias por tu colaboración de nuevo y perdona por las molestias.
Gracias!!!

ajv
Champ in-the-making
Champ in-the-making
Buenas!

Pues mis sospechas sobre lo del API de usuarios va cogiendo peso. Como te dije la función createPerson únicamente creará el nodo del tipo cmSmiley Tongueerson, pero además se requiere crear en el store de usuarios un nodo con las credenciales de éste para que pueda loguearse….y parece ser que la función createPerson no lo realiza (sólo se limita a crear la persona). He encontrado este post en el foro inglés y la incidencia relacionada aún no tiene una versión fijada: http://forums.alfresco.com/en/viewtopic.php?t=10231)
Seguiré investigando sobre ello…

Respecto a asignar permisos, sí que dispones de un API de permisos que te permiten incorporar seguridad a los espacios y demás nodos del repositorio. Viendo que usas la versión 3.0, te adjunto la especificaicón de éstas: http://wiki.alfresco.com/wiki/JavaScript_API_3.0#Permission_and_Security_API
El método que cre que usarás más en todo el tema de asignación de permisos es:
void setPermission(string permission, string authority) 
El cual asigna al nodo un permiso a la autoridad (usuario o grupo) indicada.
Algo de este tipo:
document.setPermission("Contributor",grupo);

Bueno, que vaya bien!

eduandres01_994
Champ in-the-making
Champ in-the-making
Muchas gracias ajv por tu pronta respuesta, por ahora he logrado crear el usuario y tambien loguearme mediante web services.
Tengo una duda con lo de los permisos, lo que quiero hacer es crear un web script con el cual pasandole el nombre del space y el role pueda asignar ese permiso a un grupo o usuario determinado, me podias guiar un poco en este tema.


Tengo:
space.setPermission("Contributor",grupo);
Pero como le asigno a space el space que yo quiera, tengo que hacer alguna busqueda?

De nuevo muchas gracias y perdona por la insistencia.
Gracias!!! Smiley Very Happy

ajv
Champ in-the-making
Champ in-the-making
Hola eduandres01,

Buena idea lo de tirar por web services para la creación de usuarios!  :wink:
Respecto al tema de los permisos, efectivamente, el objeto sobre el que se aplica el método setPermission es el objeto sobre el que recaerán dichos permisos.
Por tanto, 'space' debe ser el espacio al que quieres aplicar un nivel de seguridad. No tiene por qué ser un espacio, puedes hacerlo a nivel de cualquier nodo (los contenidos pueden tener su propio nivel de seguridad, de manera que dentro de un mismo espacio podría no ver todos los contenidos existentes).
Entonces, desde tu javascript debes obtener la referencia a los nodos que te interesen proteger. Por ejemplo, vía una búsqueda de lucene o similar.
Por ejemplo: var nodes = search.luceneSearch("PATH:" + args.path);
Y para cada uno de los nodos, le aplicas el permiso…

Espero haberte aclarado un poquito el tema.  :mrgreen:
Saludos!

cbarbosa
Champ in-the-making
Champ in-the-making
Hola todos,

La verdad es que me habéis aclarado no únicamente como trabajan los webscripts y cómo acceder a la api, sinó también habéis tratado justamente el tema que me tenía más preocupado que era las altas de usuarios a través de webscript. De antemano MUCHAS GRACIAS.

Me gustaría hacer 3 preguntas que seguramente os parecerán muy simples:

1-  Al crear los scripts de alta de usuario, lo busco en Alfresco y se ve correctamente los datos pero al intentar cambiar su password  me salta el siguiente mensaje:


Please correct the errors below then click Finish.

    * A system error happened during the operation: User name does not exist: miusuario


Y lo que es más curioso aún, es que aún habiendo comprobado que existe introduzco     busca2= people.enablePerson(login);  en el webscript me dice que no encuentra el usuario en el workspace/SpaceStore/company home/data dictionary…… /<ubicacion del webscript>:




var nuevo = null;
var usuarioExiste = null;

var login="";
var nombre="";
var apellidos="";
var email="";
var empresa="";
var password="";

login=args["login"];
nombre=args["nom"];
apellidos=args["ape"];
email=args["email"];
empresa=args["emp"];
password=args["pwd"];

var busca = people.getPerson(login);
var TextoUsuario= null;
var busca2=null;


if( busca == null)
{
      nuevo = people.createPerson(login);
        nuevo.properties["cm:userName"]=login;
        nuevo.properties["cm:firstName"]=nombre;
   nuevo.properties["cm:lastName"] = apellidos;
   nuevo.properties["cm:email"] =email;
   nuevo.properties["cm:organizationId"] =empresa;
   nuevo.properties["cm:password"]=password;
   nuevo.save();
        busca2= people.enablePerson(login);
   model.nuevo = nuevo;
   TextoUsuario = "El usuario de login:" + login + " y con el nombre " + nombre + " " + apellidos + ", email = " + email +",empresa=" + empresa +", password=" + password +" se ha creado con éxito! En la habilitación el resultado ha sido: "+busca2+";
   model.TextoUsuario=TextoUsuario;
}
else
{
   //people.deletePerson(args.nombre);
   TextoUsuario = "El usuario de login:" + login + " y con el nombre " + nombre + " " + apellidos + ", email = " + email +",empresa=" + empresa +", password=" + password +" NO se ha creado!!REVISE QUE NO EXISTA PREVIAMENTE!";
   model.TextoUsuario=TextoUsuario;
}



No uso ningún tipo de autenticación LDAP ,NTLM, CAS, etc… sólo la por defecto para hacer las pruebas y no consigo loggearme, así que se me ocurre otra pregunta:


2 -  Si establezco una autenticación por CAS, el alfresco normalmente me crea el usuario y su carpeta en user homes, pero que pasará si ya lo tengo en el sistema. La autenticación la hace por el CAS eso ya lo he averiguado, pero que ocurre con sus permisos y grupos gestionados por el propio alfresco.?? Y si doy de alta después de haberse loggeado al menos una vez??


3- Como puedo saber el listado de propiedades como cm:userName,cm:firstName, etcétera….?? digo porqué me interesa también limitar la cuota.!!!

Siento tantas dudas y preguntas, pero la documentación de la wiki, blogs, etc.. me lia más que me ayuda…  :lol:


Saludos y gracias