Siguiendo con los scripts para la administración de usuario y grupos en alfresco, añado algunos más que pueden resultar útiles:
- grupos_por_usuario.js:
Su propio nombre ya es bastante descriptivo, se trata de un script que dado un usuario, nos devuelve los grupos a los que este usuario está añadido. Y digo añadido y no pertenece, puesto que no nos da el listado de grupos padres-hijos a los que pertenece por herencia, sino directamente los grupos a los que este usuario ha sido añadido.
//Variable a rellenar
var usuario="";
//Funcion que comprueba si un usuario dado existe como hijo de un grupo dado
function comprueba_grupo_usuario (grupo, usuario) {
scr_grupo = groups.getGroup(grupo);
var usuarios = scr_grupo.getChildUsers();
var encontrado = false;
var i = 0;
while ( i<usuarios.length && !encontrado) {
if ( usuarios[i].getFullName() == usuario ){
encontrado = true;
}
i++;
}
return encontrado;
}
//Creamos el log que devolveremos
var logFile = space.childByNamePath("documento_salida.txt");
if (logFile == null) {
logFile = space.createFile("documento_salida.txt");
}
logFile.content ="";
//Comprobamos si el usuario existe
var authority = people.getPerson(usuario);
if (authority){
lista = people.getContainerGroups(people.getPerson(usuario));
var log = "";
log+="El usuario: " + usuario + " pertenece a los siguientes grupos.\n";
for(var i=0;i<lista.length;i++)
{
grupo = (lista[i]).properties.authorityName;
grupo = grupo.substring(6,grupo.length);
if (comprueba_grupo_usuario(grupo,usuario)){
log+="Grupo: " + grupo + " \n";
}
}
}
logFile.content += log;
- grupos_por_lista_usuarios.js:
En este caso, lo que le pasamos al script es un conjunto de usuarios de los cuales queremos obtener los grupos a los que están asignados.
//Variable a rellenar
var usuarios = new Array ('usuario1','usuario2','usuario3');
//Funcion que comprueba si un usuario dado existe como hijo de un grupo dado
function comprueba_grupo_usuario (grupo, usuario) {
scr_grupo = groups.getGroup(grupo);
var usuarios = scr_grupo.getChildUsers();
var encontrado = false;
var i = 0;
while ( i<usuarios.length && !encontrado) {
if ( usuarios[i].getFullName() == usuario ){
encontrado = true;
}
i++;
}
return encontrado;
}
var logFile = space.childByNamePath("documento_salida.txt");
if (logFile == null)
{
logFile = space.createFile("documento_salida.txt");
}
logFile.content ="";
var log = "";
for (var j=0;j<usuarios.length;j++)
{
var authority = people.getPerson(usuarios[j]);
if(authority)
{
lista = people.getContainerGroups(people.getPerson(usuarios[j]));
log+="El usuario: " + usuarios[j] + " pertenece a los siguientes grupos.\n";
for(var i=0;i<lista.length;i++)
{
grupo = (lista[i]).properties.authorityName;
grupo = grupo.substring(6,grupo.length);
if (comprueba_grupo_usuario(grupo,usuario)){
log+="Grupo: " + grupo + " \n";
}
}
}
}
logFile.content += log;
- copia_permisos_usuario.js:
El último script de esta tanda resulta bastante útil si tienes que asignar los mismos grupos de un usuario origen a otro usuario destino.
//Variables a completar
var usuario_origen="usuario1";
var usuario_destino="usuario2";
var exclusivo = true;
//Log
var logFile = space.childByNamePath("documento_salida.txt");
if (logFile == null)
{
logFile = space.createFile("documento_salida.txt");
}
logFile.content ="";
var log = "";
//Funcion que comprueba si un usuario dado existe como hijo de un grupo dado
function comprueba_grupo_usuario (grupo, usuario) {
scr_grupo = groups.getGroup(grupo);
var usuarios = scr_grupo.getChildUsers();
var encontrado = false;
var i = 0;
while ( i<usuarios.length && !encontrado) {
if ( usuarios[i].getFullName() == usuario ){
encontrado = true;
}
i++;
}
return encontrado;
}
//Obtenemos los grupos del usuario
function obtiene_permisos (usuario){
var grupos = [];
var authority = people.getPerson(usuario);
if (authority){
lista = people.getContainerGroups(people.getPerson(usuario));
log+="El usuario: " + usuario + " pertenece a los siguientes grupos.\n";
for(var i=0;i<lista.length;i++)
{
grupo = (lista[i]).properties.authorityName;
grupo = grupo.substring(6,grupo.length);
if (comprueba_grupo_usuario(grupo,usuario)){
log+="Grupo: " + grupo + " \n";
grupos.push(grupo);
}
}
}
return grupos;
}
var groupPrefix="GROUP_";
if (exclusivo){
var grupos_destino = obtiene_permisos(usuario_destino);
var authority_destino = people.getPerson(usuario_destino);
for (var i=0;i<grupos_destino.length;i++){
var srcGrpNode_destino=people.getGroup(groupPrefix+grupos_destino[i]);
people.removeAuthority(srcGrpNode_destino,authority_destino);
}
}
//Metemos al usuario destino en los mismos grupos que el usuario origen
var authority = people.getPerson(usuario_destino);
if(authority)
{
var grupos_origen = obtiene_permisos(usuario_origen);
for(var i=0;i<grupos_origen.length;i++)
{
var srcGrpNode=people.getGroup(groupPrefix+grupos_origen[i]);
if (srcGrpNode)
{
var listado = people.getMembers(srcGrpNode);
var array_usuarios = [];
for (var j=0;j<listado.length;j++)
{
array_usuarios[j]=(listado[j]).properties["{http://www.alfresco.org/model/content/1.0}userName"];
}
if (array_usuarios.indexOf(usuario_destino)== -1) //Si el usuario no existe en el grupo, lo insertamos
{
people.addAuthority(srcGrpNode,authority);
log+="- añadido usuario:" + usuario_destino + " al grupo " + grupos_origen[i] + " \n";
}
else
{
log+="- El usuario: " + usuario_destino + " ya esta en el grupo " + grupos_origen[i] + "\n";
}
}
else
{
log+="- El grupo: " + grupos_origen[i] + " no existe.\n";
}
}//final for
}
else
{
log+="- No existe usuario:" + usuario_destino + "\n";
}
logFile.content += log;
En este script, además de tener que pasarle el usuario origen y destino, le debemos indicar el valor a una variable "exclusivo", que determinará si la copia se hace sobre los grupos que ya disponga el usuario destino (false), o si por el contrario, se deben eliminar previamente (true).
Hola Rafa, interesante y funcionales estos sript que publicaste. Fijate que yo estoy buscando algún script parecido pero lo que necesito es que dicho script me devuelva los espacios o carpetas a las que tiene acceso un usuario en el repositorio... Me puede recomendar algo?
ResponderEliminarTe agradezco, saludos!!!
Hola, gracias por tu comentario. Pues se me ocurre que podrías recorrer de forma recursiva el repositorio e ir comparando los grupos de cada espacio con los del usuario en concreto. Puedes echarle un vistazo a esta entrada donde hago un recorrido de un espacio y voy obteniendo sus permisos: http://rafabono.blogspot.com.es/2010/11/mantener-los-permisos-al-copiar-un.html.
ResponderEliminarNo es una solución óptima, pues si tu repositorio es muy grande, el recorrer de forma recursiva éste será un trabajo muy costoso. Pero como un primer acercamiento y con un repositorio pequeño podría valer.
De todas formas me lo apunto para investigarlo más afondo.
Saludos.
Gracias Rafa, veré si me sirve la funcion de la entrada que me indicaste, y si encuentras algo mas practico pues bienvenido. Gracias de nuevo
ResponderEliminar