cancel
Showing results for 
Search instead for 
Did you mean: 

solo cambia los permisos al primer usuario (en workflow)

giorgio
Champ in-the-making
Champ in-the-making
Cual puede ser el problema en el siguiente código de mi parallelreview_processdefinition.xml? os cuento lo que me ocurre, con este codigo lo que hago es recorrer los adjuntos que tiene el flujo de trabajo y por cada documento le rompo la herencia le quito permisos y le asigno permisos de consumidor para los usuarios del workflow, entonces pregunto, si me esta enviando un correo a cada uno de los usuarios, porque los permisos solo los asigna al primer usuario?es decir solo puede ver el adjunto el primer usuario que asigno en el flujo de trabajo, pero los demas no pueden verlo. A que puede deberse esto? sin embargo la tarea llega a todos y el correo tambien.

saludos y gracias de antemano.


<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:parallelreview">

    <swimlane name="initiator"></swimlane>

    <start-state name="start">
        <task name="wf:submitParallelReviewTask" swimlane="initiator"/>
        <transition name="" to="startreview"/>
    </start-state>

    <node name="startreview">
        <action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
            <foreach>#{bpm_assignees}</foreach>
            <var>reviewer</var>
        </action>

        <event type="node-enter">
            <script>
                <variable name="wf_approveCount" access="write" />
                <expression>
                    wf_approveCount = 0;
                </expression>
            </script>
        </event>
        <transition name="review" to="review" />
    </node>

    <task-node name="review">
        <task name="wf:reviewTask">
            <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
               <actor>#{reviewer}</actor>
            </assignment>
        </task>
<event type="node-enter">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>


for (var i = 0; i &lt; bpm_package.children.length; i++)
{

bpm_package.children[i].setInheritsPermissions(false);

var permissions = bpm_package.children[i].permissions;
var acl=[];
for (var j=0; j &lt; permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
bpm_package.children[i].removePermission(perm,grp);

}

bpm_package.children[i].setPermission("Consumer", reviewer.properties["cm:userName"]);

}


           var mail = actions.create("mail");
           mail.parameters.to = "correo@correo.es";
           mail.parameters.subject = "Notificacion de tarea asignada";
           mail.parameters.from = "noreply@notasinternas.edu.gva.es";
           mail.parameters.text = reviewer.properties["cm:userName"]+"No responda a este mensaje.Tiene una tarea ASIGNADA debe revisarla aqui http://notasinternas.edu.gva.es";
           mail.execute(bpm_package);

</script>
</action>
</event>
        <transition name="reject" to="endreview" />
        <transition name="approve" to="endreview">
            <script>
                <variable name="wf_approveCount" access="read,write" />
                <expression>
                    wf_approveCount = wf_approveCount +1;
                 </expression>
            </script>
        </transition>
    </task-node>

    <join name="endreview">
        <transition to="isapproved" />
    </join>

    <decision name="isapproved">
        <event type="node-enter">
           <script>
              <variable name="wf_reviewerCount" access="write"/>
              <variable name="wf_requiredPercent" access="write"/>
              <variable name="wf_actualPercent" access="write"/>
              <expression>
                  wf_requiredPercent = wf_requiredApprovePercent;
                  wf_reviewerCount = bpm_assignees.size();
                  wf_actualPercent = ((wf_approveCount * 100) / wf_reviewerCount);
              </expression>
           </script>
        </event>
        <transition name="reject" to="rejected" />
        <transition name="approve" to="approved">
            <condition>#{wf_actualPercent >= wf_requiredApprovePercent}</condition>
        </transition>
    </decision>
              
    <task-node name="rejected">
        <transition to="end" />
    </task-node>

    <task-node name="approved">
        <transition to="end" />
    </task-node>

    <end-state name="end"/>

</process-definition>

19 REPLIES 19

giorgio
Champ in-the-making
Champ in-the-making
Ahora con este codigo estoy imprimiendo los permisos que hay antes de ejecutar el script y los que se quedan despues de ejecutarlo

   
document.setInheritsPermissions(false);
document.save();
var permissions = document.permissions;
var acl=[];
for (var j=0; j < permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
document.removePermission(perm,grp);
document.save();
}

document.setPermission("Coordinator", "user1");
document.save();
document.setPermission("Coordinator", "user2");
document.save();

var mail = actions.create("mail");
mail.parameters.to="jherraiz986g@cv.gva.es";
mail.parameters.subject = "Permisos";
mail.parameters.from = "noreply@notasinternas.edu.gva.es";
mail.parameters.text = permissions+"hola hola hola permisos añadidos –> "+document.permissions;
var doc=companyhome.childByNamePath("Data Dictionary/Email Templates/notify_user_email.ftl");
mail.execute(doc);



y me devuelve por el correo esto

"ALLOWED;user1;Consumer,ALLOWED;user2;Consumerhola hola hola permisos añadidos –> ALLOWED;user1;Coordinator,ALLOWED;user2;Coordinator"

por lo que deduzco que el script se esta ejecutando bien, sin embargo, no encuentro el archivo al buscarlo.

Saludos.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Ok, no lo encuentra al buscarlo entrando con user1 ¿no?

Si lo buscas con el admin y miras que seguridad tiene aplicada?

Saludos

giorgio
Champ in-the-making
Champ in-the-making
mmm, Buenos dias, como puedo ver esa seguridad? por el navegador de nodos? te refieres?

Saludos.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Bastaria con acceder a las propiedades del documento e ir a la gestion de usuarios del documento. Ahora mismo no te puedo ser mas preciso pq no tengo ningun alfresco en mi maquina.Es igual que cuando quieres asignar usuarios a un espacio, pero en este caso a un documento.

Saludos

giorgio
Champ in-the-making
Champ in-the-making
mmmm, creo que esa opcion yo no la tengo, tengo alfresco version 3.0, no se si será por eso, de todas formas por el navegador de nodos tambien se puede ver, y probando probando me parece que ya se mas o menos lo que ocurre.
ahora te cuento.

saludos.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Esa opcion esta en todas las versiones de Alfresco, es la forma manual de asignar seguridad a un documento/espacio. Para un espacio la opcion es "Gestionar Usuarios del Espacio" para el documento, ahora no lo recuerdo pero tiene que ser algo parecido.

Ok, cuando lo sepas ya nos cuentas que me tienes intrigado.

Saludos

giorgio
Champ in-the-making
Champ in-the-making
Vale, lo revisaré, pero creo que yo no la veo porque la quité para que los usuarios no pudieran hacerlo, o para probar, lo que pasa que como luego no me acuerdo, jejeje.

Buenas pues ya esta el tema solucionado, despues de 2 dias y pico dandole vueltas, lo tenia en las narices, como siempre jejeje. Paso a explicarlo.

Yo tenia este codigo tuyo Pedro (cosa mal hecha el haberlo copiado todo sin entrar mas a fondo en lo que hacia):
<event type="node-enter">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>


for (var i = 0; i &lt; bpm_package.children.length; i++)
{

bpm_package.children[i].setInheritsPermissions(false);

var permissions = bpm_package.children[i].permissions;
var acl=[];
for (var j=0; j &lt; permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
bpm_package.children[i].removePermission(perm,grp);

}

bpm_package.children[i].setPermission("Consumer", reviewer.properties["cm:userName"]);

}


           var mail = actions.create("mail");
           mail.parameters.to = "correo@correo.es";
           mail.parameters.subject = "Notificacion de tarea asignada";
           mail.parameters.from = "noreply@notasinternas.edu.gva.es";
           mail.parameters.text = reviewer.properties["cm:userName"]+"No responda a este mensaje.Tiene una tarea ASIGNADA debe revisarla aqui http://notasinternas.edu.gva.es";
           mail.execute(bpm_package);

</script>
</action>
</event>

En concreto este for es el que me estaba jodiendo:
for (var j=0; j &lt; permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
bpm_package.children[i].removePermission(perm,grp);

}
con este for los permisos del documento se estan recorriendo y se le estan quitando. ¿que ocurria entonces?
Pues como ya habia dicho por ahi, el workflow parallelo, cuando llega al fork, lo que hace es disgregarse en tantas ramas(tareas) como usuarios hayamos asignado,una para cada uno, entonces como cada rama de cada usuario ejecutaba el mismo proceso, es decir volvia a quitar los permisos del documento, borraba los del usuario anterior, lo explico con un ejemplo:

Creo un workflow parallelo en el que pongo a tres usuario , user1, user2 y user3.
Se crea la tarea, y cuando llega al fork, se disgrega en tres, una tarea para user1, otra para user2 y otra para user3
En este proceso la tarea de user1 borra los permisos del documento y le asigna el permiso Editor para user1, ya tiene acceso al documento user1
A su vez la tarea del user2 , hace lo mismo, borra los permisos del documento (con lo cual borra el acceso a user1) y da acceso a user2,
y lo mismo ocurre con la tarea de user3, borra los permisos del documento (con lo cual borra el acceso a user2), por tanto solo queda acceso para user3
y por eso los user1 y user2 cuando revisan la tarea no pueden ver el adjunto.

Solulcion, NO BORRAR los permisos anteriores. (lógico, pero hasta que no lo ves!!!! jejeje.)

Ahora paso a exponer el codigo definitivo con algunos cambios interesantes.Todo se resume a estas dos lineas:
bpm_package.children[i].setPermission("Editor", bpm_assignee.properties["cm:userName"]);
bpm_package.children[i].save();

Es decir considero que quitar la herencia no es necesario, ya que quiero que los demas grupos o usuarios que si que tienen permiso sobre el espacio donde se encuentra el documento lo sigan viendo. y ademas como ya he dicho, DEJO DE BORRAR LOS PERMISOS. De esta manera consigo mantener los permisos de la
herencia y añadir los que me hacen falta para cada usuario, y ademas puedo volver a generar el mismo proceso, cuando los usuarios entren a la tarea y la validen(o cierren, o lo que sea), pero esta vez con la linea "bpm_package.children.removePermission("Editor", bpm_assignee.properties["cm:userName"]);"
vuelvo a ir quitando los permisos de los usuarios del flujo, de manera que el documento vulve a quedar tal y como estaba al principio.

Bueno y con esto hemos terminado el problema, jejej. Espero que esto le sea util a alguien.
Sin mas, un saludo y gracias a todos, especialmente a ti Pedro y a Innovasoft, por todas las molestias que os habeis tomado conmigo y toda la ayuda que me habeis dado.

Saludos.

giorgio
Champ in-the-making
Champ in-the-making
Buenas, me parece que me he adelantado con el tema de quitar los permisos al finalizar el workflow, me esta dando problemas pero o entiendo por que.
Me explico:
Ya tengo un flujo de trabajo sobre un documento que esta dentro de un directorio sobre el que no tengo permisos, pero ya le he asignado el permiso de COORDINADOR para los 3 usuarios que tiene el workflow, con lo cual, los tres usuarios pueden ver el documento, entonces entro con uno de ellos a revisar la tarea y le doy a validar, pero el flujo da un error, que revisando el log de alfresco me tira acceso denegado, y despues de muchas pruebas he visto
que quitando la linea

bpm_package.children[z].removePermission("Coordinator", reviewer.properties["cm:userName"]);
bpm_package.children[z].save();
Ya no falla, por lo que deduzco que donde da acces denied, es en esta instrucción,

Entonces mi pregunta es: ¿Porque me da acceso denegado, es decir no me deja quitar los permisos que previramente he dado, si el usuario que esta validando el flujo, tiene permisos de COORDINADOR sobre el documento?

Por el momento la unica hipotesis de porque no me deja, es que el dueño del documento, que soy yo, soy administrador. No se si tendria algo que ver. Pero en la definicion de los roles de la documetnacion te dice que coorditator tiene los mismos derechos que owner. (Esta en el pdf Getting started…)

Saludos.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Estas usando esta sentencia para ver si se permite cambiar la seguridad al documento?
if document.hasPermission("ChangePermissions")

Saludos

giorgio
Champ in-the-making
Champ in-the-making
No, pero de todas formas, no quiero saber si se puede o no se puede, tengo que cambiarla porque quiero cambiarla. quiero decir que quiero obligar a que se pueda cambiar. como se podria ahcer?  es necesario que tenga ese permiso? si es asi,se lo tendria que dar si no lo tiene?

Saludos
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.