Buenas , actualmente tengo una instalación de alfresco 5.0d, uno de los departamentos que hace uso del repositorio, necesita poder marcar documentación como obsoleta, para que el resto de personal no la vea, pero si pueda verlo el departamento que la ha catalogado de obsoleta. Sería como un historial.
Alguien puede ayudarme.
Un saludo y gracias
Max
Solved! Go to Solution.
Quizá podrías realizarlo de una manera más sencilla, utilizando etiquetas.
Crea en primer lugar un script para cambiar los permisos de un nodo (deshabilitar herencia y establecer permisos para los grupos del usuario actual) en la ruta Repositorio > Diccionario de Datos > Scripts > change-permissions.js
document.setInheritsPermissions(false);
var currentUserGroups = people.getContainerGroups(person);
for(var i=0;i<currentUserGroups.length;i++){
document.setPermission(
"Coordinator",
currentUserGroups[i].properties["cm:authorityName"]
);
}
Después establece una regla en la carpeta para que compruebe en cada cambio de documento si se ha incluido la etiqueta "OBSOLETO" y aplique el script de arriba en caso afirmativo.
Descripción:
Activa
Ejecutarse en segundo plano
Regla aplicada a las subcarpetas
Cuando:
Se actualizan elementos
Si se cumplen todos los criterios:
Está etiquetado con 'OBSOLETO'
Realizar acción
Ejecutar script 'change-permissions.js'
De esta manera, cada vez que un usuario marque un documento con la etiqueta OBSOLETO desaparecerá de la vista de todos los usuarios que no pertenezcan a sus grupos. También puedes adaptarlo para establecer el grupo del departamento o lo que necesites.
Creo que lo más sencillo sería mover esos documentos a un sitio de archivo y establecer los permisos en ese sitio.
¿Es un requisito que los documentos se queden en su ubicación original? En ese caso, habría que desarrollar un action específico que asignase un aspecto (p. e. Obsoleto) y estableciese los permisos.
Primeramente gracias Angel ,
La idea sería mantenerlo en la misma carpeta,
Lo que propones sería crear una propiedad nueva OBSOLETO, y que se cambiasen los permisos en el momento que marcamos dicha propiedad??
Tienes un ejemplo de como asociar acciones a una propiedad (p.e: cambiar permisos)
Para realizarlo deberías desarrollar un modelo de contenido personalizado y establecer una regla que lanzase (por ejemplo) un script JS para el cambio de permisos. ¿Qué capacidades de desarrollo tienes?
Quizá podrías realizarlo de una manera más sencilla, utilizando etiquetas.
Crea en primer lugar un script para cambiar los permisos de un nodo (deshabilitar herencia y establecer permisos para los grupos del usuario actual) en la ruta Repositorio > Diccionario de Datos > Scripts > change-permissions.js
document.setInheritsPermissions(false);
var currentUserGroups = people.getContainerGroups(person);
for(var i=0;i<currentUserGroups.length;i++){
document.setPermission(
"Coordinator",
currentUserGroups[i].properties["cm:authorityName"]
);
}
Después establece una regla en la carpeta para que compruebe en cada cambio de documento si se ha incluido la etiqueta "OBSOLETO" y aplique el script de arriba en caso afirmativo.
Descripción:
Activa
Ejecutarse en segundo plano
Regla aplicada a las subcarpetas
Cuando:
Se actualizan elementos
Si se cumplen todos los criterios:
Está etiquetado con 'OBSOLETO'
Realizar acción
Ejecutar script 'change-permissions.js'
De esta manera, cada vez que un usuario marque un documento con la etiqueta OBSOLETO desaparecerá de la vista de todos los usuarios que no pertenezcan a sus grupos. También puedes adaptarlo para establecer el grupo del departamento o lo que necesites.
Gracias Angel, me fue de perlas!!!!,
tan solo una cosilla, en el caso que le quite la etiqueta, que regla he de crear para darle la vista anterior??
Pongamos un caso un poco especial:
Un documento pasa a ser obsoleto, (entra en activo la regla que me has descrito anteriormente), pero al cabo de una semana, se decide que vuelve a estar disponible, así que se le quita la etiqueta.
Que regla ha de ejecutar la carpeta??
Un saludo
Gracias
Max
Puedes crear una nueva regla para que realice la opción contraria.
Bastaría con crear una script que restaure la herencia de permisos.
document.setInheritsPermissions(true);
Buenas Angel,
una cosilla me he dado cuenta que teniendo 2 usuarios con los mismos permisos , solo uno puede etiquetar con la etiqueta de obsoleto, si intento con el otro me sale
Sabes debido a que es ??
gracias
¿Puedes incluir la salida del fichero catalina.out?
bueno por la traza de logs parece que no tengo permiso, he probado con otro usuario que tambien es colaborador y si lo crea, de hecho este mismo usuario puede añadir otra etiqueta queno sea "obsoleto":
aused by: org.alfresco.repo.security.permissions.AccessDeniedException: 00100120 Acceso denegado. Usted carece de los permisos adecuados para realizar esta operación.
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:159)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy55.setInheritParentPermissions(Unknown Source)
at org.alfresco.repo.jscript.ScriptNode.setInheritsPermissions(ScriptNode.java:1595)
at sun.reflect.GeneratedMethodAccessor1532.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
at org.mozilla.javascript.gen.workspace___SpacesStore_fdd27936_0840_49ba_8da9_847a32c9d6ed_130._c_script_0(workspace://SpacesStore/fdd27936-0840-49ba-8da9-847a32c9d6ed:1)
at org.mozilla.javascript.gen.workspace___SpacesStore_fdd27936_0840_49ba_8da9_847a32c9d6ed_130.call(workspace://SpacesStore/fdd27936-0840-49ba-8da9-847a32c9d6ed)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
at org.mozilla.javascript.gen.workspace___SpacesStore_fdd27936_0840_49ba_8da9_847a32c9d6ed_130.call(workspace://SpacesStore/fdd27936-0840-49ba-8da9-847a32c9d6ed)
at org.mozilla.javascript.gen.workspace___SpacesStore_fdd27936_0840_49ba_8da9_847a32c9d6ed_130.exec(workspace://SpacesStore/fdd27936-0840-49ba-8da9-847a32c9d6ed)
at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:502)
at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:250)
... 95 more
Caused by: net.sf.acegisecurity.AccessDeniedException: Access is denied.
at net.sf.acegisecurity.vote.AffirmativeBased.decide(AffirmativeBased.java:86)
at net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:398)
at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:77)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
... 119 more
Discussions about Alfresco Content Services and Alfresco Process Services in Spanish
Related:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.