Grazie mille!
Io vorrei implementare entrambi i meccanismi che mi avete proposto...
@Fsurfing...
[Premessa]Sai che il tuo Gosh me lo spulcio sempre con piacere... infatti avevo osservato con compiacimento il tuo meccanismo di filtraggio delle operazioni permesse.
PS. In seguito
ruberò anche la realizzazione di una tabella LOG... Poter registrare ogni operazione eseguita è fondamentale per monitorare il corretto andamento del flusso di lavoro.
[/Premessa]Se ho ben capito...
Ogni volta che faccio eseguire un'operazione al Database (interrogazione, inserimento, modifica, cancellazione, ecc.) prima faccio partire la routine Function Boolean per il controllo dei permessi.
Quando la chiamo devo inserire nel suo parametro il valore di privilegio richiesto.
In linea di principio mi piace tantissimo, ma c'è una differenza su come vorrei strutturare la gestione dei permessi.
I miei utenti possono avere privilegi non basati su una struttura piramidale, ma alcuni possono fare alcune cose, mentre altri altre cose. In questo caso penso che potrei usare le lettere dell'alfabeto... e con instr() riconoscere se il permesso compare.
Mettiamo che l'utente "Tizio" può:
Leggere (L), Inserire (I), Modificare (M) e Cancellare (C) i DATI_ANAGRAFICI dei clienti (operazione "01"), Tizio potrebbe avere nel suo campo_permessi un codice "01LIMC" (dove 01 è il valore numerico che assegno a questa operazione)
Leggere (L) gli ORDINI (operazione "02"), Tizio potrebbe avere nel suo campo_permessi un codice "02L" (dove 02 è il valore numerico che assegno a questa operazione)
Quindi "Tizio" avrebbe nella stringa permessi "01LIMC|02L|ecc..."
Mettiamo che l'utente "Caio" può:
Non può fare alcuna operazione sui Dati (operazione "01")
Leggere (L), Inserire (I), Modificare (M) gli ORDINI (operazione "02") sui clienti, Caio potrebbe avere nel suo campo_permessi un codice "02LIM" (dove 02 è il valore numerico che assegno a questa operazione)
Quindi "Caio" avrebbe nella stringa permessi "02LIM|ecc..."
Così Tizio avrà "01LIMC|02L|ecc..."
mentre Caio avrà "02LIM|ecc..."
In questo modo, quando faccio partire un'operazione sul database la Function potrebbe essere del tipo:
If Mlog.controllo('02M') Then
codice da eseguire
Endif
Ed il controllo mi restituisce TRUE se, nella stringa (che ricavo con uno SPLIT, "|" ed un FIND."02" sull'array di split), trova instr[stringa_trovata] "M", mentre restituisce FALSE se non trova niente.
Quindi nell'esempio '02M': per Tizio il controllo restituisce FALSE, mentre per Caio TRUE...
Per far girare il tutto dovrò creare un apposito Form per la gestione dei permessi, con tutto l'elenco delle possibili operazioni!
@Leo:
per i pulsanti posso usare un procedimento simile... Anzi potrei settare direttamente la proprietà dei pulsanti .Enable o .Visible = controllo('01M')
Inoltre, come consigliatomi da milio per popolare il WorkSpace io uso una TreeView... Quindi in base all'utente mi basterebbe modificare la struttura dell'albero...
Per il cambio_utente con privilegi differenti durante il programma in esecuzione, sono orientato a far fare il controllo dei Children Aperti nel WorkSpace, e se un utente può visualizzare la classe genitrice di quell'istanza FORM rimane visibile, altrimenti si chiude. E chiaramente dovrà aggiornare la struttura della treeview e del Menù al nuovo utente...
Intanto vi comunico che il gestionale sta venendo proprio carino! Grazie Mille per i consigli, senza di voi sarei perso!!