Como visualizar acciones en función del usuario??

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

Como visualizar acciones en función del usuario??

Buenas a todos,

he creado una serie de acciones que se visualizan como unos botones debajo de una carpeta (o espacio), y lo que quiero hacer es que en función del usuario y de sus permisos se visualicen unos botones u otros.

Por ejemplo:

Un usuario "Profesor" crea una carpeta dentro del espacio CREACIÓN. Debajo de esta carpeta creada habrá el botón que ejecuta la acción "mandar a edición".
Posteriormente un "Editor" visualizará dicha carpeta, la editará, y debajo solo le tiene que aparecer la acción "mandar a revisión". La misma carpeta creada por el profesor.

Espero que se entienda.

He estado jugando con los permisos, pero nada, y en algun foro hay un ejemplo, pero no me ha funcionado. Lo que había hecho es una función simple en java que en funcion de si el espacio tiene permiso de Creacion (por ejemplo) devuelve true o false:


    package alfresco.web.action.evaluator;

    import org.alfresco.web.action.evaluator.BaseActionEvaluator;
    import org.alfresco.web.bean.repository.Node;

    public class CompruevaCreacion extends BaseActionEvaluator {
       public boolean creacion(Node node){
          boolean ok=false;
          if(node.hasPermission("Creacion")) ok=true;
          return ok;
       }
    }



y luego en el web-client-config.custom.xml

    <action id="moveToEdicion">
                <permissions>
                   <permission allow="true">Creacion</permission>
                </permissions>
                <evaluator>org.alfresco.web.action.evaluator.BaseAactionEvaluator.CompruevaCreacion</evaluator>
                <label>Mover la carpeta a edicion</label>
                <image>/images/icons/edit_form.gif</image>
                <tooltip>Mover estado</tooltip>
                <script>/Company Home/Data Dictionary/Scripts/cM_mouEdicion.js</script>
                <params>
                   <param name="id">#{actionContext.id}</param>
                </params>
             </action>



Pero nada. O se me ven todas las acciones, o ninguna. Pero no consigo hacerlo depender del usuario.

Me podéis ayudar??
15 Replies
pjcaracuel_2349
Active Member II

Re: Como visualizar acciones en función del usuario??

Muy buenas,

En su dia se hablo de este tema en el siguiente post

https://forums.alfresco.com/es/viewtopic.php?f=6&t=1111

Un Saludo
massanen_2296
Member II

Re: Como visualizar acciones en función del usuario??

Muchas gracias por contestar, pero aun no me chuta. Para poneros en contexto:

- Estaba trabajando con Alfresco 3.4d Community, hasta que me enteré que hay un bug que no deja ejecutar scripts a usuarios diferentes al administrador.

- Trabajo con Alfresco 3.2r Community, a priori la versión "reciente" mas estable. Lo que me ocurre es lo siguiente:

1) Definición de permisos:

<permissionGroup name="Creacion" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

        <!– estat edicio –>
        <permissionGroup name="Edicion" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

        <!– estat acceptacio –>
        <permissionGroup name="Acceptacion" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

        <!– estat reedicio –>
        <permissionGroup name="Reedicion" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

        <!– estat publicacio –>
        <permissionGroup name="Publicacion" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

        <!– estat historic –>
        <permissionGroup name="Historico" allowFullControl="false" expose="true">
           <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" />
        </permissionGroup>

2) Definicion de la accion que tienen que ejecutar los profesores, es decir, que tengan el permiso de mandar a Edicion:

                    <action id="moveToEdicio">
            <!–<evaluator>alfresco.extension.ComprovaPermisosAccions.ComprovaEdicio</evaluator> –>
            <evaluator>cM_permisosAccions.ComprovaEdicio</evaluator>
            <!–
            <permissions>
               <permission allow="true">Creacio</permission>
            </permissions>
            –>
            <!–<evaluator>org.alfresco.web.action.evaluator.BaseAactionEvaluator.ComprovaCreacio</evaluator>–>
            <label>Moure la carpeta a Edicio</label>
            <image>/images/icons/edit_form.gif</image>
            <tooltip>Moure destat</tooltip>
            <script>/Company Home/Data Dictionary/Scripts/cM_mouEdicio.js</script>
            <params>
               <param name="id">#{actionContext.id}</param>
            </params>
         </action>

3) Definicion del evaluator cM_PermissosAccions.ComprovaEdicio:
package cM_permisosAccions;

import javax.faces.context.FacesContext;

import org.alfresco.web.action.ActionEvaluator;
import org.alfresco.web.bean.repository.Node;

public class ComprovaEdicio implements ActionEvaluator {

   @Override
   public boolean evaluate(Node node) {
      
      return (node.hasPermission("Edicio"));
   }

   @Override
   public boolean evaluate(Object node) {
      // TODO Auto-generated method stub
      return false;
   }

   
}

Y finalmente, a la carpeta de estado "creacion" de mi alfresco webclient, le asigno permisos de Edicion al grupo de profesores. Y así en todos los estados.

Resultado: No se capa ninguna acción. O se ven todas o ninguna. No funciona en funcion del usuario.


Qué he provado??
pues bien, cambiar el tipo de permisos, en vez de que cada nuevo permiso tenga perfil "Collaborator", hacerlos distintos. Si pongo, por ejemplo, el estado "Creacion" con el permiso "admin", perfecto. Este me lo oculta por todos los usuarios que no son Admins. Pero a la que pongo que Edicion sea "Collaborator", Acceptacion "Coordinator", etc. El repositorio peta:

javax.faces.FacesException: javax.servlet.ServletException: java.lang.StackOverflowError
caused by:
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.StackOverflowError
caused by:
javax.servlet.ServletException: java.lang.StackOverflowError
caused by:
java.lang.StackOverflowError
(por eso he explicado la versión en la que estaba trabajando, que no sé si tiene nada que ver…)


Alguna idea???

Muchas gracias!
pjcaracuel_2349
Active Member II

Re: Como visualizar acciones en función del usuario??

Una cosa que no se si estara bien

<permissionGroup name="Edicion" allowFullControl="false" expose="true">

Es Edicion o Edicio??

Comentarte que yo veria mas logico que el evaluador compruebe si el usuario que esta conectado pertenece o no a un grupo para que le muestre la accion, no comprobar si un nodo tiene aplicado o no un permiso.

Saludos
massanen_2296
Member II

Re: Como visualizar acciones en función del usuario??

Es "Edicio", lo que pasa que al principio me había entretenido a traducir las etiquetas para colgarlas al foro, pero ya veo que me he dejado alguna. Pero nada, se entiende igualmente. Los nombres de estado estan bien:

creacio = creacion
edicio = edicion
acceptacio = acceptacion
retencio = retencion
reedicio = reedicion
publicacio = publicacion
historic = historico

A parte de esto, en principio no me dejo nada, no?? la clase en java está bien, no?? es muy simple todo…
pjcaracuel_2349
Active Member II

Re: Como visualizar acciones en función del usuario??

La clase esta bien, o almenos eso creo yo.

No tienes mas datos del error en el log? Puedes postear el contenido de alfresco.log?

Saludos
cristinamr
Advanced

Re: Como visualizar acciones en función del usuario??

Uhmmmm… ¿has probado a hacer un pequeño script para ver con la consola qué te devuelve el hasPermission? A ver si el problema es que no lo hace correctamente.

¡Un saludo!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
massanen_2296
Member II

Re: Como visualizar acciones en función del usuario??

El problema era que cuando el usuario Profesor crea un nuevo trabajo, automáticamente dicho profesor ejerce de "admin" sobre el trabajo que ha creado. Entonces tenía todos los permisos, y por consiguiente, veía todas las acciones. Entonces lo que he hecho es crear una regla que cuando un trabajo es creado, los permisos se modifiquen. Pero no funciona. Entonces he cambiado de estrategia: hacer que las acciones se visualicen en función del Aspect que tiene la carpeta en de estado en cuestión.

Entonces he creado distintos aspects, que asocio a cada estado-carpeta. Y el evaluator de acción que sea, en vez de "return(node.hasPermission("Creacio")", un "return(node.hasAspect()". Y ahí va mi duda:

- La función hasAspect espera que le pase, no un String, sino un QName. Me podríais explicar como le pongo el aspecto personal que he creado?? se llama:

aspectes:aspect-creacio

Si le meto esto, como es string, me da error…


Gracias y saludos!!
cristinamr
Advanced

Re: Como visualizar acciones en función del usuario??

¿Has probado con lucene lanzar una query con el nombre del aspecto, traertelo como un "node" y pasarle entonces el qname?

Ten en cuenta que vas a tener que tratarlo como si fuera un nodo, no te va a servir solo con la String.

Un saludo.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
massanen_2296
Member II

Re: Como visualizar acciones en función del usuario??

Buenas!
al final lo he solucionado, haciendo lo que os he dicho, es decir,  ejecutando una regla que asigne un aspect en cada carpeta-estado. Entonces el evaluator de java, en vez de comprovar si tiene permisos, comprueva si tiene el aspect. La clase es igual de simple y queda de la siguiente forma, por si le sirve a alguien: 


package cM_permisosAccions;

import org.alfresco.web.action.ActionEvaluator;
import org.alfresco.web.bean.repository.Node;

import org.alfresco.service.namespace.QName;

public class ComprovaEdicio implements ActionEvaluator {

   @Override
   public boolean evaluate(Node node) {
      
      QName aspect_creacio = QName.createQName("http://www.alfresco.com/model/aspectes-model/1.0", "aspect-creacio");
      return (node.hasAspect(aspect_creacio));
   }

   @Override
   public boolean evaluate(Object node) {
      // TODO Auto-generated method stub
      return false;
   }

   
}

No obstante, ahora tengo otro problema. Todo funciona perfecto como admin, pero si intento crear un trabajo en una carpeta donde se ejecuta una regla que ponga un aspect, me dice que no tengo permisos… Smiley Frustrated Como puedo hacer que los usuarios distintos a admin puedan crear y mover archivos entre estas carpetas que tienen reglas asignadas???

Un saludo y gracias de nuevo!