Webscript spaces con acceso un grupo

cancel
Showing results for 
Search instead for 
Did you mean: 
goja
Member II

Webscript spaces con acceso un grupo

Hola, "buenos días", mirad tengo un problemilla o problemón, estoy más perdía… Resulta que tengo que hacer un webscript que dado un grupo, muestre los spaces a los que tiene acceso ese grupo (teniendo en cuenta que soy nueva en esto).

Y yo creo que me estoy haciendo un lío de mucho cuidado, el caso que yo buscando me he planteado usar el avm.lookupNode, pasándole la ruta de la carpeta a partir de la cual quiero que me busque donde ese grupo tiene acceso, es decir, dentro de User Homes, un nivel más abajo, pero no sé ni pasarle la ruta a ese módulo, qué formato llevaría ese path (avm.lookupNode(path)), eso me devolvería el node, con ese node buscaría los permisos que tiene con node.permissions y de ahí tendría que ir recorriendo todos los elementos que me devuelve y ver si aparece el string GROUP_elquesea, y sacar el susodicho space.

Estoy más liá que una persiana, verdad? Alguien me ayuda a usar lookupNode? Me pueden guiar de esta o de otras maneras para obtener el resultado?

Muchas gracias y perdonad mi ineptitud!! Smiley Sad
8 Replies
pjcaracuel_2349
Active Member II

Re: Webscript spaces con acceso un grupo

Hola paisana,

Desgraciadamente no te lo puedo dar con mas detalle porque yo de programacion los justito, pero en la wiki, hay un ejemplo
que te puede orientar mucho en la forma de recorrer los espacios, solo quedaria, a la vez ir comprobando si el grupo esta en ese espacio…
Con esto y con una lectura de los javadoc de alfresco,seguro que te orientas.

http://wiki.alfresco.com/wiki/Java-backed_Web_Scripts_Samples

protected NodeRef getNodeRef(WebScriptRequest req)
    {
        // NOTE: This web script must be executed in a HTTP Servlet environment
        if (!(req instanceof WebScriptServletRequest))
        {
            throw new WebScriptException("Content retrieval must be executed in HTTP Servlet environment");
        }
        HttpServletRequest httpReq = ((WebScriptServletRequest)req).getHttpServletRequest();
       
        // locate the root path
        String path = (String) httpReq.getParameter("path");
        if(path == null)
        {
           path = "/images";
        }
        if(path.startsWith("/"))
        {
           path = path.substring(1, path.length());
        }
       
        // build a path elements list
        List<String> pathElements = new ArrayList<String>();
        StringTokenizer tokenizer = new StringTokenizer(path, "/");
        while(tokenizer.hasMoreTokens())
        {
           String childName = (String) tokenizer.nextToken();
           pathElements.add(childName);
        }
       
        // look up the child
        NodeRef nodeRef = null;
        try
        {
           NodeRef companyHomeRef = this.repository.getCompanyHome();
           nodeRef = getFileFolderService().resolveNamePath(companyHomeRef, pathElements).getNodeRef();
        }
        catch(FileNotFoundException fnfe)
        {
           throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to locate path");
        }       
        if (nodeRef == null)
        {
            throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to locate path");
        }

        return nodeRef;
    }
ajv
Member II

Re: Webscript spaces con acceso un grupo

Hola goja,

Si no hubiera revisado el API te hubiera recomendado emplear directamente alguno de los métodos siguientes:
java.util.Set    findNodesByAssignedPermission(java.lang.String authority, java.lang.String permission, boolean allow, boolean includeContainingAuthorities, boolean exactPermissionMatch)
Find all the nodes where the current user has explicitly been assigned the specified permission.

java.util.Set    findNodesByAssignedPermissionForCurrentUser(java.lang.String permission, boolean allow, boolean includeContainingAuthorities, boolean includeContainingPermissions)
Find all the nodes where the current user has explicitly been assigned the specified permission.
La cuestión es que he revisado el PermissionService (http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/service/cmr/security/PermissionSe...) y esos métodos se encuentran Deprecated (desaprobados, pasados de moda  Smiley Very Happy) y no sé porqué razón ni por qué se pueden sustituir.
En teoría puedes seguir usándolo, pero nadie te asegura que en posteriores versiones desaparezca del API…lo cual te generaría algún que otro problemilla :?
Ahora, suponiendo que te decidas a usarlo, son métodos de un API java que quieres incrustar en un webscript y que no están disponibles en el API Javascript. Para que veas posibles alternativas, te recomiendo que le eches un vistazo a otro post en el que estuvimos tratando este mismo tema: http://forums.alfresco.com/es/viewtopic.php?f=11&t=1007&start=0&st=0&sk=t&sd=a
Bueno, espero que te haya servido un poquitín de ayuda.
Si me entero de algún "plan B" para evitar usar esos método, te aviso.  :wink:

Saludos!
goja
Member II

Re: Webscript spaces con acceso un grupo

Hola buenas, ante todo muchas gracias a los dos por intentar ayudarme con vuestras respuestas, el caso es que ya hemos conseguido mostrar todos los permisos desde la carpeta que queremos hacia abajo, ahora los mostramos todos así:
<#list node.permissions as p>
                   <tr><td> ${p} </td></tr>                  
          </#list>
pero yo no quiero mostrarlos todos, sino dentro del list comprobar si la cadena "GROUP_XXXXX" se encuentra en lo que me devuelve p, y si está pues lo imprimo y sino pues nada, y así solo me mostrará los de ese grupo que yo quiero, pero me estoy volviendo loca buscando pero lucene no tiene ninguna función con esa funcionalidad, no? Bueno se me olvidaba comentar que esto lo tengo ahora en una template, lo estoy probando ahí poniéndole a mano un grupo, para una vez que lo consiga pues pasarlo al webscript, desde el cual cogeremos el grupo que nos pasen.

Y si me podéis quitar la duda de si yo puedo utilizar algún lenguaje de programación, vamos me refiero, funciones específicas de algún lenguaje dentro de una plantilla???, lo mismo es una pregunta "mu burra", pero es que como yo digo: "La ignorancia es que es muy fea" y yo tengo mucho de eso Smiley Happy

Muchas gracias!!!
pjcaracuel_2349
Active Member II

Re: Webscript spaces con acceso un grupo

Buenas paisana,

echale un vistazo a esto

http://freemarker.sourceforge.net/docs/index.html
http://wiki.alfresco.com/wiki/FreeMarker_Template_Cookbook

Como comentario, es uno de los "peros" que le encuentro a Alfresco, el no incluir la seguridad como metadatos de los documentos de una forma eficaz y facil de gestionar.

Saludos
goja
Member II

Re: Webscript spaces con acceso un grupo

Paisano fíjate que tenía ese manual pero se ve que no lo había observado a fondo, y he encontrado contains que me hace eso que yo quiero, ahora lo malo es que no lo hago para los hijos de los spaces, es decir, solo lo compruebo para los espaces que cuelgan directamente del que parto, así que me tengo que pensar algo más para los child, recursivamente.

Una pregunta, se puede usar una macro dentro del .ftl de un webscript???

Muchas gracias, un saludo.
pjcaracuel_2349
Active Member II

Re: Webscript spaces con acceso un grupo

goja
Member II

Re: Webscript spaces con acceso un grupo

Muchas gracias por todo, al fin ayer lo conseguí sacar como necesitaba, lo pongo por si alguien necesita algo parecido:
<!– webscript que partiendo de el space CCC, nos da los spaces a los que tiene permiso (y nos indica qué permiso) un grupo determinado, pasado por parámetro –>
<#macro dir node depth>

<#if node.isContainer>
          <#if node.permissions?exists>
     
           <#list node.permissions as p>                  
                      <#if p?contains(g)>                           
                           <tr> <td align='left'>${p?split(";")[2]}</td>
                           <td align='leftr'>${node.name}</td>    
                           <td>${node.displayPath?substring(25)}/${node.name}</td>
                            </tr>
                       </#if>
          </#list>        
     <#else>
         <td> no tiene permisos</td>
     </#if>

   </tr>

<#else>
   <b>El space <i>${folderName}</i> NO existe …</b>
</#if>

   <#list node.children as child>
      <#if child.isContainer && node.children?size != 0>
         <@dir node=child depth=depth+1/>
      </#if>
   </#list>

</#macro>

<!– create a table and start traversing the space structure –>
<html>
<body>

<#assign folderName="User Homes/CCC" />
<#assign node=folderName>
<img src="${url.context}/images/logo/AlfrescoLogo32.png" alt="Alfresco" />

<#if args.group?exists>  

  <#if grupo?exists>           

    <#if companyhome.childByNamePath[folderName]?exists>
         <#assign folderObj=companyhome.childByNamePath[folderName]>
         <#assign g=grupo.properties["usr:authorityName"] +";">
           
         <b>Spaces a los que puede acceder el grupo: </b> ${grupo.properties["usr:authorityName"]}<br>
         <br><br>
         <table border="1">
         <tr><th>Permiso</th><th>Space</th><th>Ruta</th></tr>
         <@dir node=folderObj depth=0/>
         </table>
     </#if>

  <#else>

       <b>Spaces a los que puede acceder el grupo: </b> El grupo "${args.group}" no existe<br>

  </#if>

</#if>


</body>
</html>

Un saludo para todos Smiley Wink

Ahhh una cosilla, en qué va que yo no pueda votar que sí ha sido útil la respuesta que me han dado?? quién tiene potestad para mirarme eso??

Muchas gracias!!!!
pjcaracuel_2349
Active Member II

Re: Webscript spaces con acceso un grupo

Preguntaselo a bbrooks, administrador del foro.

Gracias por compartir tus desarrollos

Saludos