questa è la mia prima pillola, vi chiedo quindi di essere clementi !

questa pillola è nata dalla mia necessità di gestire in modo dinamico e veloce i permessi all'interno di un gestionale basato di mysql e php, credo che la soluzione adottata possa andare bene per qualsiasi portale/sito/gestore che abbia una certa complessità dei permessi, la prima soluzione adottata (NON ADATTA) è quella dei livelli

- livello utente (legge)
- livello gestore(legge e inserisce)
- livello admin(legge,scrive,cancella, e tutto quello che vuole)

questa soluzione limita un po...non tanto per il fatto che 3 livelli sono pochi, si possono sempre aumentare...ma piu per il fatto che può esserci un utente che può leggere in una sezione ma potrebbe anche scrivere in un altra..quindi in una sezione dovrebbe avere livello 2, nell'altra livello 1 ecc ecc.....la soluzione a cui sono giunto io è quella di fare una tabella di permessi, poi ogni utente avrà nel database un campo "permessi" di tipo varchar(255) o anche text se i permessi sono molti (più di 200), il concetto su cui si basa l'autenticazione è questo:


nel campo permessi ci andrà una stringa, all'indice iesimo della stringa c'è un carattere , se il carattere è 1 il permesso con ID iesimo è concesso, se è 0 il permesso è negato


passiamo al codice:

Codice PHP:

/*
questa funzione permette di scegliere tramitre comode checkbox i permessi che vanno abilitati o no per ogni utente
*/
function set_permessi($utente){
    ?>
    <table>
    <tr>
    <td>NOME PERMESSO</td>
    <td>ABILITA/DISABILITA</td>
    </tr>
    <?

    $query
="select * from permessi";
    
$elenco=mysql_query($query);

        while(
$rs=mysql_fetch_array($elenco)){
        
/*
        per ogni record stampo il nome del permesso e un checkdox con nome perm_ID_PERMESSO e verifico se l'utente ha gia quel permesso seleziono gia il check, altrimenti no
        */

        
?>

        <tr >

        <td><? echo $rs["nome_permesso"];?></td>
        <td><input type="checkbox" name="perm_<?echo $rs["id"]?><? if (check_permesso($rs["nome_permesso"],$utente){echo "checked"}?>></td>    
        </tr>

        <?

        
}


    
?>
    <tr><td colspan="2">

    <input type="submit" value="IMPOSTA PERMESSI" ></td></tr>
    </table>

    </form>

    <?

    

    
}


/*
questa funzione si occupa di creare la stringa che imposta i permessi per l'utente che gli è stato passato va chiamata dalla pagina alla quale è stato inviato il form creato sopra
*/

function crea_permessi($utente){

/*
la funzione get_last_id ritorna l'id maggiore nella tabella passata come parametro
*/
$lunghezza_stringa    =    get_last_id("permessi");

//imposto l'elemento in posizione [ID] della stringa con il valore del check[ID]

for($i=0;$i<=$lunghezza_stringa;$i++){
$permessi.=c_check($_POST["perm_".$i]);

}

mysql_query("update tabella_utenti set permessi = $permessi where id=$utente");


}

/*
funzione che verifica se un dato permesso è concesso ad un utente
*/
function get_permesso($permesso,$utente){
$stringa_permesso    =get_vfield("utenti","id",$utente,"permessi",0);
$id_permesso        =get_vfield("permessi","nome",$permesso,"id",0);
/*
ritorna 1 o 0 a seconda di quello che c'è nella stringa dei permessi
*/

return (int)$stringa_permesso[$id_permesso];
}


/*
funzione get_vfield ritorna il valore del campo del record cercato nella tabella data con il campo dato e il valore dato
*/
function get_vfield($tabella,$campo_dato,$valore_dato,$valore_cercato){



$elenco mysql_query("select $valore_cercato from $tabella where $campo_dato = '$valore_dato' ");

$num_utenti mysql_num_rows($elenco);



    if (
$num_utenti>0){

        
$rs=mysql_fetch_array($elenco);

        return 
$rs[$valore_cercato];

    }else{

        return 
"non trovato";

    }



}

/*
funzione utilizzata per verificare lo stato di un check
*/
function c_check($valore){

    if(
$valore=="on"){

    return 
1;

    }else{

    return 
0;

    }

}
bisognerà creare poi un'interfaccia per inserire/modificare/eliminare i vari permessi

nel momento in cui io voglio verificare il permesso di un certo utente per fare una operazione basterà fare:

Codice PHP:

if(check_permesso("inserire_contatto",$utente)){
/*
...inserimento contatto...
*/
}else{
/*
...avviso credenziali non sufficienti...
*/


spero possa essere utile a qualcuno...