Creazione di un campo password in modo dinamico
Proteggere un Google Form con una password in modo programmatico da Apps Script
Il tema della protezione dei Form Google suscita sempre molto interesse, tuttavia una funzionalità che soddisfi questa esigenza non è offerta (quantomeno ad oggi) dagli strumenti Google, pertanto una volta che il modulo è creato diventa immediatamente di accesso pubblico per impostazione predefinita, ovvero chiunque può accederci purché conosca il suo URL.
Con un account Google Apps l'accesso al file può essere limitato agli utenti del relativo dominio, ma con un account Google comune questo non è possibile.
In tal caso una soluzione può essere quella di creare un Google Form che ha come prima domanda la richiesta di una password per poter proseguire con il contenuto effettivo del modulo. Questo impedirà agli utenti di immettere dati in tale Form se non conoscono la chiave di accesso.
Graficamente quello che intendo è una situazione di questo tipo, Fig. 1:
Creando un Form in modo programmatico, come spiegato dettagliatamente nell'articolo 'I vantaggi di creare un Google Form da codice tramite Google Apps Script', possiamo ottenere il risultato di cui sopra utilizzando il seguente codice da lanciare tramite uno script autonomo:
function creaFormConPassword() {
// Creazione di un Form vuoto
var form = FormApp.create('Google Form protetto da password');
formID = form.getId();
// Creo la validazione con un'espressione regolare
var regexValidation = FormApp.createTextValidation()
.requireTextMatchesPattern('^www.appsscript.it$')
.build();
// Inserimento nel form di un campo di testo
form.addTextItem()
.setTitle('Inserisci la password per proseguire?')
.setHelpText('Inserisci la password che ti è stata fornita per accedere al modulo.')
.setValidation(regexValidation)
.setRequired(true);
form.addPageBreakItem().setTitle('Benvenuto nel modulo');
// Inserimento nel form di un campo a scelta esclusiva
form.addMultipleChoiceItem()
.setTitle('Sei già iscritto al gruppo Facebook "Fatti di Apps Script"?')
.setHelpText('Se non lo sei ancora il link è il seguente: https://www.facebook.com/groups/AppsScript/')
.setChoiceValues(['Sì','No']);
// Altre domande del form...
}
Come è possibile vedere dalla funzione, oltre la banale creazione del documento aggiungo come primo elemento un campo di testo preceduto dal codice necessario per creare una validazione dei dati tramite un'espressione regolare per verificare la corrispondenza di pattern con la stringa inserita come risposta alla domanda (la password, che nel caso specifico è: www.appsscript.it).
Il metodo utilizzato è:
var regexValidation = FormApp.createTextValidation().requireTextMatchesPattern('pattern_della_password').build();
A questo punto, tale validazione viene associata al campo di testo per la richiesta della password tramite il metodo .setValidation(regexValidation), la risposta viene poi resa obbligatoria con .setRequired(true).
A seguire viene fatto uso del metodo .addPageBreakItem() per fare in modo che il resto delle domande dopo tale comando si trovi in una seconda pagina. In questo modo è possibile lasciare visibile all'utente, accedendo all'URL del Google Form, solo la richiesta della password e non il contenuto dei campi successivi (accessibili solo dopo aver inserito la password corretta).
La parte di codice è a mio avviso il lato più interessante dell'articolo, dato l'argomento monotematico del blog, tuttavia non è necessario passare da Google Apps Script per ottenere il risultato desiderato ma è possibile farlo direttamente dall'interfaccia di Google Form tramite il suo l'editor WYSIWYG, tant'è che nella sezione di edit è facile vedere la proiezione visuale di ciò che il codice di cui sopra ha creato (e che può essere replicato manualmente), Fig. 2:
Il rovescio della medaglia è che tale soluzione alternativa, alla mancanza di una vera e propria protezione del documento da un accesso pubblico, non è a prova di bomba... buona parte dell'utenza può essere senz'altro fermata ma un utilizzatore un po' più scaltro con un minimo di conoscenze HTML può trovare in breve tempo la password cercandola nel codice sorgente della pagina, Fig. 3:
Questa precisazione è doverosa perché se il vostro Form è realmente confidenziale forse non è il caso di utilizzare questo metodo... e forse non è neanche il caso di utilizzare Google Form.
ciao! ho creato un foglio di lavoro exel, che contiene una specie di gioco, funziona che alcune caselle sono modificabili dal giocatore mentre altre sono "protette" e non modificabili dal giocatore, dopo di che ho scritto uno script effettua il "passaggio di turno" e si attiva al click di un bottone.
Il mio problema è che se sono presenti delle protezioni il foglio di google non mi fa eseguire lo script in quanto esso stesso non può scrivere all'interno di caselle protette se eseguito da un utente che non ha i permessi.
ho pensato a due soluzioni possibili ma avrei bisogno di un consiglio e di un aiuto anche a scrivere quest'aggiunta allo script:
ipotesi 1
inserisco un comando che permette allo script di ignorare la protezione
ipotesi 2
inserisco all'inizio dello script un comando per rimuovere le protezioni e a fine script un comando per rimettere la protezione sul foglio escludendo le caselle con cui il giocatore deve interagire.
potresti aiutarmi?
Ciao Carlo,
a mio avviso la seconda ipotesi potrebbe essere l'ideale.
Puoi trovare i vari metodi della Classe Protection per gli Spreadsheet nella documentazione ufficiale: https://developers.google.com/apps-script/reference/spreadsheet/protection
Ciao non ho trovato un modo semplice per proteggere dalla "replica" (stampa, copia incolla, visualizzare codice sorgente). Magari è possibile con uno script?
Grazie
Ciao Luca,
non so se questo risponde alla tua domanda, ad ogni modo in questo articolo trovi alcune info su come Nascondere il codice agli occhi degli utenti:
https://www.appsscript.it/articoli/come-proteggere-il-codice-apps-script-in-un-foglio-di-lavoro-google/
Per il resto, questo tipo di limiti, se non possono essere in qualche modo gestiti dall'interfaccia dello strumento della G Suite (limitando i permessi alla visualizzazione ad esempio), difficilmente possono essere gestiti da codice.
Ciao, stavo cercando una soluzione al mio problema e spero tu possa essermi di aiuto.
Devo creare un modulo google al quale avranno accesso vari utenti, servirà per compilare la mensa aziendale settimanale di ogni dipendente, ogniuno dovrà poter compilare solo la sua sezione e non quella di altri quindi l'unico modo penso sia quello di avere una password differente per ogni nome.
la cosa pensi sia fattibile?
Avevo trovato un'altra soluzione, quella di creare un modulo per ogni persona con password collegato allo stesso foglio excel, ma essendo in tanti il problema si presenta al momento di cancellare le risposte, va aperto ogni modulo singolarmente e cancellato le risposte, ci vuole un' eternità.
Spero tu abbia un consiglio o una soluzione.
Grazie mille
Ciao Riccardo,
i Form di Google non hanno molta elasticità da certi punti di vista e a mio avviso la tua soluzione alternativa è un buon punto di partenza.
Per evitare di perdere tempo ad aprire ciascun singolo foglio potresti prevedere uno script che va a recuperare per te le varie risposte nei diversi fogli (sulla base di una mappatura su ciascun ID) e le convogli verso un unico Foglio di Google (ad esempio in diverse tab) dal quale con una funzione inversa e un bottone personalizzato puoi avviare uno script che cancella la riga desiderata sul foglio originale. Un po' macchinoso ma sicuramente può essere divertente costruirlo e, se ben fatto, ti fa risparmiare un sacco di tempo.
Ciao Michele, grazie per avermi risposto.
Siccome i form saranno limitati settimanalmente a una sola risposta, quindi con login tramite account google, i form devono essere azzerati non solo sul foglio excel ma anche sul form stesso e per darlo si deve entrare singolarmente in ogni modulo. Pensi esista un metodo rapido per fare ciò?
Ciao Riccardo,
su due piedi mi viene da pensare che un'idea potrebbe essere quella di creare Form dinamicamente, qui trovi uno spunto per iniziare: https://www.appsscript.it/tutorial/i-vantaggi-di-creare-un-google-forms-da-codice-tramite-google-apps-script/.
Generandoli in automatico potresti crearti un sistema che ogni settimana ne crea di nuovi e distribuisce i relativi URL via mail.
Non è un'attività immediata ma se ben studiata e strutturata potrebbe liberarti da ogni impiccio manuale.