Ciao Mircov,
se ho capito bene ti interessa capire il meccanismo per creare livelli differenti di permessi in un'area riservata del sito, è corretto?
Potrei scrivere per settimane su questo argomento (= molto più di una pillola ) ma sono stracarico di lavoro e ti illustrerò il concetto di base di una possibile soluzione.
Nella tabella degli utenti, oltre agli altri dati/parametri, inserisci un campo varchar (per esempio 'allow' varchar(7)) in cui memorizzerai l'array dei permessi in formato stringa.
Prima di tutto devi progettare per bene il tipo di operazioni disponibili da disciplinare con i permessi, è importantissimo! Per esempio:
$allow[0] lettura files cartella utente
$allow[1] scrittura files cartella utente
$allow[2] lettura files admin
$allow[3] scrittura files admin
Ad ogni elemento associ il valore 0 o 1 a seconda che quel livello di permesso sia abilitato o no. La concatenazione degli elementi dà luogo alla stringa dei permessi; come elemento separatore per esempio puoi usare il punto (".").
Se un navigatore che accede ha la stringa 1.1.0.0 è chiaramente un utente, se la stringa è 1.1.1.1 ovviamente si tratta di un amministratore con pieni poteri di letture/scrittura/modifica etc, se ha 1.1.1.0 è un assistente-amministratore e così via...
Nella pagina del login estrai il campo allow dal DB e lo esplodi in un array:
Codice PHP:
// $allow è la stringa del campo permessi;
$allow = explode(".", $allow);
$_SESSION['allow'] = $allow;
In questo modo hai memorizzato il vettore dei permessi in una variabile di sessione fin dalla pagina di login: l'utente se la porterà appresso per tutta la sua permanenza nell'area riservata che stai costruendo.
In questo modo l'esecuzione di qualsiasi tipo di codice può diventare condizionale.
Per esempio puoi regolamentare l'accesso ad ogni singola pagina, o a dei contenuti parziali, oppure ancora l'esecuzione di funzioni o di singole istruzioni in base alla presenza del permesso relativo a quell'operazione specifica. Per questo ci vuole solo un po' di fantasia:
Codice PHP:
if ($_SESSION['allow'][3] == 1)
{
echo "[B]Pagina di inserimento prodotti[/B]
etc etc...
\n";
}
else { echo "Non si dispone dei permessi necessari per visualizzare questa pagina.\n"; }
Per uscire dall'area dovrai creare una pagina di logout in cui distruggi il vettore dei permessi di sessione, per esempio con l'unset():
Codice PHP:
unset($_SESSION['allow']);
Questo avverrebbe automaticamente se il browser venisse chiuso.
Ma se vuoi che l'area riservata sia "isolata" dal resto del sito, dovrai inserire quell'unset() anche in tutte le pagine del sito che non fanno parte dell'area, cosicché se il navigatore esce senza passare per la pagina di logout (per esempio con un link verso la home page) la sessione venga annullata.
In aggiunta ci sarebbero da dire molte altre cose interessanti... :master: mmh...
Molte le scoprirai da te lavorando con questo sistema. Per esempio, se i permessi di accesso di un utente vengono modificati da un amministratore mentre l'utente è connesso è ovvio che per lui non verranno aggiornati automaticamente durante la sessione.
Mai usato quei programmi (gestionali ma anche altri) che per rendere effettive le modifiche operate su un account richiedono di "uscire e rientrare"? Beh, il principio di funzionamento non è molto diverso. Il vettore di sessione viene ricomposto leggendo dal DB i dati dei permessi solo rieffettuando l'accesso. E il tuo utente vedrà nuove opzioni disponibili...
Questo è il concetto di base, che è possibile anche sviluppare con le classi. In un ambiente di variabili molto vasto può senz'altro aumentare l'organicità del codice.
Altra osservazione: la durata della sessione di collegamento all'area riservata sarà esattamente quella stabilita dalle impostazioni di php sulla macchina su cui gira il tuo sito. Se il php è installato su webserver Apache la durata della sessione dovrebbe essere impostata di default a 1800 sec (30 min), su IIS a 10800 sec (3 ore); la configurazione del parametro session.gc_maxlifetime è nel file php.ini.
Come ho premesso, la progettazione dei livelli di permesso è importantissima, e per un lavoro efficiente dovrebbe prevedere anche eventuali espansioni postume dei permessi (qualcuno dice che in un lavoro perfetto il 90% di tempo è pianificazione, il 10% è realizzazione ). Infatti sebbene l'estensione della stringa dei permessi sia possibile in un secondo momento, è pur vero che conservare una certa organicità per la struttura dei suoi elementi mantiene il codice più semplice, leggibile e facile da rielaborare in seguito.
Ti sono stato di aiuto?