Impedire download documenti

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

Impedire download documenti

Ciao a tutti,
             
            vorrei riuscire a impedire il download di alcuni documenti.
So come eliminare del tutto il comando download dalle action dei documenti, ma vorrei poter selezionare a quali documenti applicare tale modifica.
Come primo passo ho pensato di creare un aspetto e di nascondere per i documenti che hanno tale aspetto associato il comando "download"; ho creato quindi l'aspetto
<aspect name="ans:NonScaricabile" />
che ho poi associato a un documento di prova.
A questo punto pensavo di poter ottenere quanto voluto  semplicemente inserendo nel file
 C:\Alfresco\tomcat\webapps\share\WEB-INF\classes\alfresco\share-documentlibrary-config.xml
il seguente codice:




   <actions>
      <!– Download document –>
      <action id="document-download" type="link" label="actions.document.download">
         <param name="href">{downloadUrl}</param>
         <evaluator>evaluator.doclib.action.downloadBrowser</evaluator>

      <!– Sfrutto questo aspetto per controllare la presenza della action download –>
          <evaluator negate="true">evaluator.doclib.action.NonScaricabile</evaluator>
      <!– –>

      </action>




ma, evidentemente, ho sbagliato da qualche parte o sono stato troppo ottimista (nel senso che la soluzione non è così semplice) perché… non funziona.
Aspetto indicazioni, consigli, esempi….

Grazie.
6 Replies
davidciamberlan
Alfresco Employee

Re: Impedire download documenti

Ciao,

prova con:


<evaluator negate="true">evaluator.doclib.action.hasAspect("NonScaricabile")</evaluator>


barcoffin
Member II

Re: Impedire download documenti

Grazie per la risposta ma purtroppo anche così non funziona… continuo a studiare la cosa… ma se qualcuno ha consigli/suggerimenti… sarebbero molto graditi…
davidciamberlan
Alfresco Employee

Re: Impedire download documenti

Ciao…

prova a procedere così:

in shared/classes/alfresco/web-extension nel file share-config-custom.xml puoi aggiungere le seguenti righe (è preferibile usare le configurazione nella cartella shared invece di modificare il file originario).


<alfresco-config>
   <config evaluator="string-compare" condition="DocLibActions">
      <actions>
        <action id="document-download">       
           <evaluator negate="true">evaluator.hasXXXAspect</evaluator>
        </action>
      </actions>
   </config>
</alfresco-config>


dove XXX è il nome del tuo Aspect

Poi devi dichiarare l'evaluator. Sempre nella cartella web-extension crea un file di configurazione di nome (ad es.) XXX-action-context.xml e inserisci questo codice:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC '-//SPRING/DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
    <bean id="evaluator.hasXXXAspect" class="org.alfresco.web.evaluator.HasAspectEvaluator">
        <property name="aspects">
         <list>
            <value>{tuonamespace}:XXX</value>
         </list>
      </property>
    </bean>
</beans>



Dovrebbe essere sufficiente.

Riavvia alfresco e prova (a me funziona - alf 4.1.2).

barcoffin
Member II

Re: Impedire download documenti

Grazie mille… ora provo anche questa… nel frattempo ero riuscito a risolvere così (dopo aver creato l'aspetto
<aspect name="ans:NonScaricabile">
):
Ho creato una classe Java per estendere il BaseEvaluator, che ho inserito come evaluator-non-scaricabile.jar in tomcat/webapps/share/WEB-INF/lib:
<java>
package nonscaricabile.documentlibrary.action.evaluator;

import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.web.evaluator.BaseEvaluator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class VerificaNonScaricabile extends BaseEvaluator
{
   private static final String ASPETTO_NON_SCARICABILE = "ans:NonScaricabile";

   @Override
   public boolean evaluate(JSONObject jsonObject)
   {
      try
      {
         JSONArray nodeAspects = getNodeAspects(jsonObject);
         if (nodeAspects == null)
         {
            return false;
         }
         else
         {
            if (nodeAspects.contains(ASPETTO_NON_SCARICABILE))
            {
               return true;
            }
            else
            {
               return false;
            }
         }
      }
      catch (Exception err)
      {
         throw new AlfrescoRuntimeException("JSONException nell'esecuzione dell'evaluator: " + err.getMessage());
      }
   }
}
</java>
All'interno del file tomcat/shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml ho inserito il codice:

<beans>

<bean id="evaluator.doclib.action.NonScaricabile" class="nonscaricabile.documentlibrary.action.evaluator.VerificaNonScaricabile" />

</beans>

e infine, nel file tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml ho inserito il coodice:

   <config evaluator="string-compare" condition="DocLibActions">
   <actions>
      <action id="document-download">       
         <evaluator negate="true">evaluator.doclib.action.NonScaricabile</evaluator>
       </action>
   </actions>
   </config>


La tua soluzione effettivamente sembra più "elegante" (non hai bisogno di estendere la classe) e ora la provo; comunque questo è solo il primo passo.
Sfruttando lo stesso aspetto riesco anche a nascondere il "Copia in" (se infatti copio il documento in un'altra cartella la copia "perde" l'aspetto e risulta così scaricabile) inserendo nel file tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml il coodice:

   <config evaluator="string-compare" condition="DocLibActions">
   <actions>
      <action id="document-copy-to">       
         <evaluator negate="true">evaluator.doclib.action.NonScaricabile</evaluator>
       </action>
   </actions>
   </config>


A questo punto però ho ancora 2 problemi da risolvere per non vedere vanificati tutti gli sforzi fatti …:
1 - nella pagina del documento risulta presente il tasto "download"
2 - effettuando nel repository la selezione di più documenti rimangono attive nel menu "Elementi selezionati" le voci "Scaricare come file zip" e "Copia in"

Ora passo all'analisi di questi problemi… se avete idee/consiglli/suggerimenti… sono qui :-)
davidciamberlan
Alfresco Employee

Re: Impedire download documenti

Ciao,

hai fatto bene a condividere anche la tua soluzione… sicuramente in alcune situazioni può essere più adatta di quella suggerita da me.

Riguardo agli altri problemi, puoi provare a procedere nello stesso modo variando la condition e l'evaluator in share-config-custom.
Per esempio, se utilizzi lo stesso codice nel block
<config  evaluator="node-type" condition="cm:folder" >[…]</config>

il pulsante di download dovrebbe sparire anche dal dettaglio della cartella… (quindi se trovi tutti gli evaluatore e le condition che ti servono, risolvi il tuo problema).


Non mi torna invece quello che affermi riguardo la copia… perchè il file copiato dovrebbe perdere l'aspetto?



barcoffin
Member II

Re: Impedire download documenti

Ed ecco la mia soluzione per il tasto download… pare che lo facciamo apposta a trovarle diverse… :-)
L'aspetto che ho utilizzato è così definito:


   <aspect name="ans:NonScaricabile">
      <title>Documento non scaricabile</title>
      <properties>
         <property name="ans:nonScaricabile">
            <title>Documento non scaricabile</title>
            <type>d:boolean</type>
            <default>true</default>
         </property>
      </properties>
   </aspect>



A questo punto nel file Nel file tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/node-details/node-header.get.js modifico il codice che, originariamente è:
<javascript>
   ….
   if (nodeDetails)
   {
      model.item = nodeDetails.item;
      model.node = nodeDetails.item.node;
      model.isContainer = nodeDetails.item.node.isContainer;
      model.paths = AlfrescoUtil.getPaths(nodeDetails, model.rootPage, model.rootLabelId);
      model.showQuickShare = (!model.isContainer && model.showQuickShare && config.scoped["Social"]["quickshare"].getChildValue("url") != null).toString();
      model.showComments = ((nodeDetails.item.node.permissions.user["CreateChildren"] || false) && model.showComments).toString();
      model.showDownload = (!model.isContainer && model.showDownload).toString();

      var count = nodeDetails.item.node.properties["fm:commentCount"];
      ….
</javascript>

trasformandolo in
<javascript>

   if (nodeDetails)
   {

      model.nonScaricabile = (nodeDetails.item.node.properties["ans:nonScaricabile"] || false);

      model.item = nodeDetails.item;
      model.node = nodeDetails.item.node;
      model.isContainer = nodeDetails.item.node.isContainer;
      model.paths = AlfrescoUtil.getPaths(nodeDetails, model.rootPage, model.rootLabelId);
      model.showQuickShare = (!model.isContainer && model.showQuickShare && config.scoped["Social"]["quickshare"].getChildValue("url") != null).toString();
      model.showComments = ((nodeDetails.item.node.permissions.user["CreateChildren"] || false) && model.showComments).toString();

      model.showDownload = (!model.isContainer && model.showDownload && !model.nonScaricabile</strong>).toString();

      var count = nodeDetails.item.node.properties["fm:commentCount"];

</javascript>

In questo modo il tasto Download scompare dai documenti che hanno l'aspetto associato; ora non rimane che sistemare la voce "Scaricare come file zip" quando si selezionano più documenti…
Per quanto riguarda il discorso di "perdere" l'aspetto in fase di copia… beh… non so cosa sia successo ma ho fatto una prova ed effettivamente sembrava aver perso l'aspetto. Ora non posso ma fra un po' riprovo e comunico l'esito…
Devo correggermi… l'aspetto non viene perso… quindi il "copia in…" può essere lasciato… va però "bloccato" il comando "vedi nel browser" dato che, per alcune tipologie di documenti, in realtà avvia il download