{"id":420,"date":"2011-06-10T00:01:35","date_gmt":"2011-06-09T23:01:35","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=420"},"modified":"2016-07-29T09:00:36","modified_gmt":"2016-07-29T07:00:36","slug":"php-mysql-gestire-i-privilegi-degli-utenti-e-creare-un-sito-a-livelli-di-accesso","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/420\/php-mysql-gestire-i-privilegi-degli-utenti-e-creare-un-sito-a-livelli-di-accesso\/","title":{"rendered":"PHP, MYSQL &#8211; Gestire i privilegi degli utenti e creare un sito a livelli di accesso"},"content":{"rendered":"<p>Poco tempo fa abbiamo visto come <a title=\"Creare una login sicura e funzionale usando i cookies - Sir Bit\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/343\/php-creare-una-login-sicura-e-funzionale-usando-i-cookies\/\">creare una login sicura<\/a> per accedere a un&#8217;area di amministrazione.<br \/>\nA questo punto potremmo fare un passo avanti e stabilire, <strong>per ogni utente, quali sono le aree in cui pu\u00f2 accedere e quali invece nascondergli<\/strong>.<\/p>\n<h2>Un campo nel database per gestire i livelli<\/h2>\n<p>Possiamo gestire la cosa in due modi.<br \/>\nIn un caso, nella tabella <code>utenti<\/code> (che abbiamo gi\u00e0 nel database) aggiungiamo un semplice campo chiamato <code>livello<\/code>, che conterr\u00e0 un valore intero. All&#8217;utente amministratore daremo il valore &#8220;1&#8221;, mentre a seguire gli altri utenti avranno un numero superiore, che corrisponde a un privilegio via via pi\u00f9 basso.<\/p>\n<p><strong>Ogni livello avr\u00e0 accesso a determinate aree<\/strong>. L&#8217;amministratore, naturalmente, avr\u00e0 accesso a qualsiasi area, mentre gli utenti del secondo livello, per esempio, potranno accedere a tutto tranne all&#8217;area di gestione delle password o della creazione delle fatture. Gli utenti di terzo livello, invece, si vedranno negare anche aree minori come la possibilit\u00e0 di modificare alcuni dati.<br \/>\nNaturalmente, le pagine o le aree di accesso per ogni livello saranno a discrezione del programmatore e potranno essere diverse da sito a sito.<!--more--><\/p>\n<p>Usando questo metodo, \u00e8 molto semplice negare l&#8217;accesso. Ci basta estrarre il livello dell&#8217;utente (per esempio in una variabile di sessione) e <strong>fare un controllo a inizio della pagina voluta<\/strong>. In caso di privilegi troppo bassi, si reindirizza all&#8217;index o a una qualsiasi altra pagina:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_SESSION<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'livello'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">&gt;<\/span><span style=\"color: #cc66cc;\">2<\/span><span style=\"color: #009900;\">)<\/span>\r\n\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"Location: index.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Il metodo \u00e8 molto semplice, ma in alcuni casi limitante. Se per esempio in futuro avremo la necessit\u00e0 di creare un utente intermezzo al livello 2 e al livello 3 (in pratica, con privilegi superiori al 3 ma inferiori al 2), potremmo essere costretti a modificare del codice o i valori nel database.<\/p>\n<h2>Una stringa nel database in binario per gestire gli accessi<\/h2>\n<p>Vediamo un metodo pi\u00f9 efficace, anche se leggermente pi\u00f9 laborioso.<\/p>\n\n<p>Invece di un valore intero, potremmo <strong>salvare all&#8217;interno del campo <code>livello<\/code> una stringa contenente del codice in binario<\/strong>. Ogni posizione (ogni numero) identifica un&#8217;azione e il valore (0 o 1) stabilisce se si ha accesso a quell&#8217;azione o meno.<\/p>\n<p><strong>Facciamo un esempio<\/strong>. Stabiliamo che la prima posizione si riferisca all&#8217;area &#8220;gestione utenti&#8221;, la seconda a &#8220;gestione fatture&#8221; e la terza a &#8220;visualizzazione dati&#8221;. A ognuna di queste sezioni corrisponde un&#8217;area del sito, una parte di pagina o un&#8217;azione (a vostra discrezione). Per &#8220;gestione utenti&#8221;, per esempio, uno 0 impedir\u00e0 di accedere alla pagina che gestisce gli utenti. Per &#8220;visualizzazione dati&#8221;, invece, uno 0 impedir\u00e0 la vista di una parte di pagina in cui si mostra l&#8217;elenco dei dati.<\/p>\n<p>Adesso prendiamo quattro utenti fittizi (gi\u00e0 presenti nella tabella <code>utenti<\/code>) e compiliamo il loro campo <code>livello<\/code> rispettivamente con queste stringhe:<br \/>\nCampo per l&#8217;utente A: 111<br \/>\nCampo per l&#8217;utente B: 011<br \/>\nCampo per l&#8217;utente C: 001<br \/>\nCampo per l&#8217;utente D: 001<\/p>\n<p>Traducendo in parole:<br \/>\nL&#8217;utente A visualizza tutte e tre le sezioni (ha tutte le posizioni a 1).<br \/>\nL&#8217;utente B pu\u00f2 gestire le fatture e visualizzare i dati, ma non pu\u00f2 gestire gli utenti (la prima posizione \u00e8 a 0).<br \/>\nGli utenti C e D possono soltanto visualizzare i dati.<\/p>\n<p>In caso di <strong>aggiunta di un&#8217;altra sezione, dovremmo creare un ulteriore 0 o 1<\/strong> in fondo alla stringa del campo <code>livello<\/code>. Per esempio, potremmo aggiungere la quarta posizione &#8220;gestione pagine del sito&#8221;. Di conseguenza gli utenti saranno modificati in questo modo:<br \/>\nUtente A: 1111<br \/>\nUtente B: 0110<br \/>\nUtente C: 0010<br \/>\nUtente D: 0010<\/p>\n<p>Potenzialmente non esiste limite alla quantit\u00e0 di aree gestibili in questo sistema e non vengono intaccati i precedenti permessi.<\/p>\n<h3>Come controllare l&#8217;accesso a un&#8217;area<\/h3>\n<p>Adesso ci sar\u00e0 utile la <strong>funzione per controllare se l&#8217;utente ha effettivamente accesso all&#8217;area<\/strong> o all&#8217;azione richiesta.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #666666; font-style: italic;\">\/\/estrae il valore della posizione-livello passata: true se \u00e8 1 (attivo), false se \u00e8 0<\/span>\r\n<span style=\"color: #000000; font-weight: bold;\">function<\/span> livelli_valore<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$posizione<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #000088;\">$char<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$_SESSION<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"livello\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #000088;\">$posizione<\/span><span style=\"color: #339933;\">-<\/span><span style=\"color: #cc66cc;\">1<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #000088;\">$char<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #009900;\">}<\/span>\r\n\r\n<span style=\"color: #666666; font-style: italic;\">\/\/funzione da richiamare a inizio pagina o all'interno dell'area da controllare<\/span>\r\n<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #339933;\">!<\/span>livelli_valore<span style=\"color: #009900;\">(<\/span><span style=\"color: #cc66cc;\">2<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"Location: index.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;\r\n}\r\n<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In questo caso ho controllato la seconda posizione della stringa, cio\u00e8 &#8220;gestione fatture&#8221;. Se risulta uno 0, l&#8217;utente non pu\u00f2 accedere (utenti C e D) e viene reindirizzato all&#8217;index. Altrimenti lo script nel resto della pagina viene eseguito (utenti A e B).<\/p>\n<p>Quello che abbiamo visto \u00e8 la base per la gestione di un sistema a livelli. E&#8217; possibile, naturalmente, (e auspicabile) creare una pagina ad hoc per cambiare i permessi degli utenti o per aggiungere una sezione senza dover intervenire direttamente nel database.<\/p>\n<h3>Esempio<\/h3>\n<p>Riassumiamo i concetti, facendo un esempio concreto (e minimale: dovranno essere apportate le dovute integrazioni, dove c&#8217;\u00e8 bisogno).<br \/>\nInseriamo nel database una tabella <code>user_livelli<\/code>, che conterr\u00e0 il nome delle pagine e la loro posizione nella stringa dei livelli utente:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"mysql\" style=\"font-family: monospace;\"><span style=\"color: #990099; font-weight: bold;\">CREATE<\/span> <span style=\"color: #990099; font-weight: bold;\">TABLE<\/span> <span style=\"color: #990099; font-weight: bold;\">IF <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> EXISTS<\/span> <span style=\"color: #008000;\">`user<span style=\"color: #008080; font-weight: bold;\">_<\/span>livelli`<\/span> <span style=\"color: #ff00ff;\">(<\/span>\r\n  <span style=\"color: #008000;\">`id`<\/span> <span style=\"color: #999900; font-weight: bold;\">int<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">11<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span> <span style=\"color: #ff9900; font-weight: bold;\">auto_increment<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #008000;\">`posizione`<\/span> <span style=\"color: #999900; font-weight: bold;\">int<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">3<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #008000;\">`nome`<\/span> <span style=\"color: #999900; font-weight: bold;\">varchar<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">255<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #990099; font-weight: bold;\">PRIMARY KEY<\/span>  <span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008000;\">`id`<\/span><span style=\"color: #ff00ff;\">)<\/span>\r\n<span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #990099; font-weight: bold;\">ENGINE<\/span><span style=\"color: #cc0099;\">=<\/span>MyISAM  <span style=\"color: #990099; font-weight: bold;\">DEFAULT<\/span> <span style=\"color: #ff9900; font-weight: bold;\">CHARSET<\/span><span style=\"color: #cc0099;\">=<\/span>latin1 <span style=\"color: #ff9900; font-weight: bold;\">AUTO_INCREMENT<\/span><span style=\"color: #cc0099;\">=<\/span><span style=\"color: #008080;\">1<\/span> <span style=\"color: #000033;\">;<\/span>\r\n\r\n<span style=\"color: #990099; font-weight: bold;\">INSERT<\/span> <span style=\"color: #990099; font-weight: bold;\">INTO<\/span> <span style=\"color: #008000;\">`user<span style=\"color: #008080; font-weight: bold;\">_<\/span>livelli`<\/span> <span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008000;\">`id`<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">`posizione`<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">`nome`<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #990099; font-weight: bold;\">VALUES<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">1<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008080;\">1<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Amministratore (solo supervisore)'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">,<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">2<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008080;\">2<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Fatture di acquisto'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">,<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">3<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008080;\">3<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Fatture di vendita'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">,<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">4<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008080;\">4<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Riepilogo fatture'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>La nostra tabella utenti sar\u00e0 di questo tipo (al posto dei [&#8230;] ci potranno esserci altri campi a piacere, come il nickname):<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"mysql\" style=\"font-family: monospace;\"><span style=\"color: #990099; font-weight: bold;\">CREATE<\/span> <span style=\"color: #990099; font-weight: bold;\">TABLE<\/span> <span style=\"color: #990099; font-weight: bold;\">IF <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> EXISTS<\/span> <span style=\"color: #008000;\">`user`<\/span> <span style=\"color: #ff00ff;\">(<\/span>\r\n  <span style=\"color: #008000;\">`id`<\/span> <span style=\"color: #999900; font-weight: bold;\">int<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">11<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span> <span style=\"color: #ff9900; font-weight: bold;\">auto_increment<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #008000;\">`username`<\/span> <span style=\"color: #999900; font-weight: bold;\">varchar<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">255<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span> <span style=\"color: #990099; font-weight: bold;\">default<\/span> <span style=\"color: #008000;\">''<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #008000;\">`password`<\/span> <span style=\"color: #999900; font-weight: bold;\">varchar<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">32<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span> <span style=\"color: #990099; font-weight: bold;\">default<\/span> <span style=\"color: #008000;\">''<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #ff00ff;\">[<\/span>...<span style=\"color: #ff00ff;\">]<\/span>\r\n  <span style=\"color: #008000;\">`livello`<\/span> <span style=\"color: #999900; font-weight: bold;\">varchar<\/span><span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">200<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #cc0099; font-weight: bold;\">NOT<\/span> <span style=\"color: #9900ff; font-weight: bold;\">NULL<\/span> <span style=\"color: #990099; font-weight: bold;\">default<\/span> <span style=\"color: #008000;\">'0'<\/span><span style=\"color: #000033;\">,<\/span>\r\n  <span style=\"color: #990099; font-weight: bold;\">PRIMARY KEY<\/span>  <span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008000;\">`id`<\/span><span style=\"color: #ff00ff;\">)<\/span>\r\n<span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #990099; font-weight: bold;\">ENGINE<\/span><span style=\"color: #cc0099;\">=<\/span>MyISAM  <span style=\"color: #990099; font-weight: bold;\">DEFAULT<\/span> <span style=\"color: #ff9900; font-weight: bold;\">CHARSET<\/span><span style=\"color: #cc0099;\">=<\/span>latin1 <span style=\"color: #ff9900; font-weight: bold;\">AUTO_INCREMENT<\/span><span style=\"color: #cc0099;\">=<\/span><span style=\"color: #008080;\">1<\/span> <span style=\"color: #000033;\">;<\/span>\r\n\r\n<span style=\"color: #990099; font-weight: bold;\">INSERT<\/span> <span style=\"color: #990099; font-weight: bold;\">INTO<\/span> <span style=\"color: #008000;\">`user`<\/span> <span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008000;\">`id`<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">`username`<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">`password`<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #ff00ff;\">[<\/span>...<span style=\"color: #ff00ff;\">]<\/span> <span style=\"color: #008000;\">`livello`<\/span><span style=\"color: #ff00ff;\">)<\/span> <span style=\"color: #990099; font-weight: bold;\">VALUES<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">1<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Admin'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'password<span style=\"color: #008080; font-weight: bold;\">_<\/span>criptata'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #ff00ff;\">[<\/span>...<span style=\"color: #ff00ff;\">]<\/span> <span style=\"color: #008000;\">'1000'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">,<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">2<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Utente1'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'password<span style=\"color: #008080; font-weight: bold;\">_<\/span>criptata'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #ff00ff;\">[<\/span>...<span style=\"color: #ff00ff;\">]<\/span> <span style=\"color: #008000;\">'0110'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">,<\/span>\r\n<span style=\"color: #ff00ff;\">(<\/span><span style=\"color: #008080;\">3<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'Utente2'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #008000;\">'password<span style=\"color: #008080; font-weight: bold;\">_<\/span>criptata'<\/span><span style=\"color: #000033;\">,<\/span> <span style=\"color: #ff00ff;\">[<\/span>...<span style=\"color: #ff00ff;\">]<\/span> <span style=\"color: #008000;\">'0001'<\/span><span style=\"color: #ff00ff;\">)<\/span><span style=\"color: #000033;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Il campo <code>livello<\/code> del database contiene una stringa, che si collega immediatamente con il campo <code>posizione<\/code> della tabella <code>user_livelli<\/code>. Come notate, infatti, la stringa ha quattro cifre (in binario) e la tabella <code>user_livelli<\/code> contiene esattamente quattro tipologie di livello.<br \/>\nL&#8217;Admin, nel nostro caso, una volta che acceder\u00e0 avr\u00e0 soltanto il potere di supervisore (solo la posizione 1 \u00e8 attiva, le altre gli sono negate). L&#8217;Utente1, invece, potr\u00e0 gestire le fatture di acquisto e di vendita, ma non potr\u00e0 vedere il riepilogo delle fatture (posizione 2 e 3 attive, posizione 4 disattivata).<\/p>\n<p>Una volta impostate le basi nel database, vediamo come \u00e8 possibile integrarle nel sito. Poniamo il caso di avere due pagine, chiamate <code>fatture_vendita.php<\/code> e <code>utenti.php<\/code>. La prima permette di gestire le fatture di vendita, la seconda mostra l&#8217;elenco degli utenti registrati.<br \/>\nNoi vogliamo fare in modo che gli utenti siano visibili soltanto all&#8217;amministratore. All&#8217;inizio della pagina <code>utenti.php<\/code> inseriamo quindi il controllo che abbiamo viso sopra:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #339933;\">!<\/span>livelli_valore<span style=\"color: #009900;\">(<\/span><span style=\"color: #cc66cc;\">1<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"Location: index.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;\r\n}\r\n<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In pratica, controlliamo che l&#8217;utente abbia attiva la posizione 1 nel database: in tal caso si pu\u00f2 proseguire e vedere l&#8217;elenco degli utenti; in caso contrario, si viene reindirizzati alla homepage.<br \/>\nNel nostro esempio, solo l&#8217;utente Admin ha la prima posizione attiva (la prima cifra della stringa a 1), quindi lui soltanto potr\u00e0 accedere alla pagina.<\/p>\n<p>Lo stesso concetto si far\u00e0 per la pagina <code>fatture_vendita.php<\/code>, ma in questo caso il controllo dovr\u00e0 essere fatto sulla terza posizione:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #339933;\">!<\/span>livelli_valore<span style=\"color: #009900;\">(<\/span><span style=\"color: #cc66cc;\">3<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"Location: index.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;\r\n}\r\n<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>L&#8217;Utente2 potr\u00e0 accedere alla pagina, mentre tutti gli altri utenti si vedranno reindirizzare a <code>index.php<\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In un&#8217;area di amministrazione ci pu\u00f2 essere utile attribuire privilegi di accesso diversi per gli utenti. Vediamo come creare una struttura di base efficiente.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[32,4],"class_list":["post-420","post","type-post","status-publish","format-standard","hentry","category-php-mysql","tag-mysql","tag-php","cat-78-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/420"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=420"}],"version-history":[{"count":15,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/420\/revisions"}],"predecessor-version":[{"id":2421,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/420\/revisions\/2421"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}