Visualizzazione risultati 1 fino 12 di 12

Discussione: Login multilivello

  1. #1
    Guest

    Post Login multilivello

    Salve a tutti.
    Premetto che mi rendo conto che il tema che tratterò in questa discussione è stato affrontato svariate volte, ma non sono riuscito a trovare una soluzione che mi abbia soddisfatto appieno.

    Ho creato un sito con alcune pagine protette da login. L'inserimento di nuovi utenti avviene per mezzo di una comune pagina di registrazione. Le funzioni di login e registrazione, però, non sono scritte direttamente nei file login.php e registrazione.php, bensì all'interno di un'unica classe, che ho chiamato login.class.php (l'ho fatto per comodità e per evitare di andare a toccare la maggior parte di codice PHP).
    Ora il problema che mi si presenta è questo: come ogni sistema di autenticazione che si rispetti, ho deciso di implementare la funzione per controllare i privilegi dell'utente e stabilire se esso sia un amministratore o un semplice utente standard, con accesso limitato a determinate funzioni.
    Cercando in giro, ho trovato varie soluzioni, ma mai una che riuscisse a soddisfare appieno le mie esigenze, spesso perché incomplete o incompatibili con le mie richieste.
    C'è quindi un modo per eseguire questo controllo sul database e consentire a un utente standard di visualizzare certe cose, mentre lasciare la piena libertà agli account amministrativi?
    Per fare ciò con il database, ho aggiunto una colonna chiamata "privilegi", di tipo ENUM, con i valori "A" e "U": ogni volta che un nuovo utente si registra al sito gli viene assegnato il valore "U" per default (ho settato così nelle proprietà della colonna). Se mai dovessi "promuovere" un utente ad amministratore, lo farei comodamente da phpmyadmin, modificando il valore da "U" ad "A" (tanto per far capire che non è questo il problema!).
    Per maggior chiarezza vi allego qui sotto il codice di login.class.php (ho rimosso tutti i dati riservati del database):

    http://zecchinishowservice.altervist...ogin.class.txt

    (non ho potuto allegare direttamente il file PHP perché altrimenti avrei ecceduto con i caratteri).

    Grazie mille!

  2. #2
    Guest

    Predefinito

    Non c'è proprio nessuno nessuno che mi possa dare una mano?

  3. #3
    Guest

    Predefinito

    Per ogni cosa che vuoi lasciar fare solo agli amministratori fai un controllo di che tipo è l'utente.
    Ad esempio un pulsante che ti permette di cancellare un post:
    If(tipo_utente == 'a'){ print "<input type='submit' ecc>";}
    Oppure se hai bisogno di fare due pagine diverse
    If( tipo_utente == 'a') {
    ?>
    Pagina html per admin
    <?php
    }else{
    ?>
    Pagina utente
    <?php
    }
    ?>


    È ciò che cercavi?
    Ultima modifica di competenzepertutti : 04-07-2015 alle ore 00.55.05

  4. #4
    Guest

    Predefinito

    Grazie per la tua risposta, ma non è quello che sto cercando. Mi spiego meglio: ho bisogno di fare vedere determinati contenuti solo agli amministratori, mentre agli utenti base voglio far visualizzare dei contenuti più ristretti.
    Non è male la tua idea di creare due pagine distinte, una per gli amministratori e una per gli utenti standard, però se dovessi farlo per ogni singola pagina, penso che starei male solo a pensarci, anche perché gestisco questo sito per conto di un mio amico, che mi ha chiesto aiuto, e sinceramente ci sto perdendo molto tempo (troppo, per i miei gusti, anche se è una cosa che faccio con molto piacere), e trovare un metodo per "buttare" letteralmente il mio tempo (che non ho ultimamente) non è qualcosa di cui ho strettamente bisogno
    Hai per caso in mente qualche altro metodo per riuscire nell'intento?

  5. #5
    Guest

    Predefinito

    Per mostrare una cosa agli admin, ed una cosa agli altri utenti io farei così:
    Ti faccio un esempio con 3 immagini... La prima la vedono tutti,la seconda cambia se uno è admin o se uno è utente normale...
    Scusami la scrittura rozza ma sto col cell :)

    <html>
    <img A visibile a tutti>
    <?php
    If ($utente == 'a'){
    Echo "<img B visibile solo agli admin>" //sarà a fianco della prima, quindi gli admin vedono immagine A e B.
    }else{
    Echo "<img C visibile solo agli utenti>" //sarà a fianco della prima,quindi chi non è 'a' vede immagine A e C.
    }
    ?>
    Tutto il resto che vedrà chiunque
    </html>

    E per ogni cosa che deve differire tra admin e utenti dovrai fare una cosa del genere.
    Spero di non aver fatto errori.
    Ultima modifica di competenzepertutti : 05-07-2015 alle ore 01.57.21

  6. #6
    Guest

    Predefinito

    Grazie mille per la dritta. Provo a vedere come va e ti dico se funziona.

  7. #7
    Guest

    Predefinito

    Mi servirebbe un ultimo aiuto, poi prometto che la smetto Che cosa mi conviene usare per integrare la funzione per estrapolare l'informazione "A" oppure "U" dal database nella classe login.class.php?

  8. #8
    Guest

    Predefinito

    Quando fai un area di login, avrai un input di inserimento dati username e password, questa usernam e password saranno salvati nella tabella utente di Sql, nella tabella utente tu puoi inserire oltre username e password tutti i dati di registrazione quindi puoi avere una tabella :

    id, username, password, profilo, nome, cognome, etc...etc...

    quando l'utente inserisce i dati username e password tu aprirari la connessione al DB e controllerai che esista lo username con quella password se l'utente esiste aprirai una SESSION_START() ad inizio pagina(in tutte le pagine dell'area di login) in questa session start che metti ad inizio file, puoi alimentarla con tutti i campi relativi a quell'utente loggato, quindi la logica è quando ho controllato che l'utente e la password sono corrette dico al parse SESSION_START() il che vuol dire parte la sessione, poi dovrò dirgli quali dati voglio dentro la sessione, il modo migliore, a mio avviso è inserire in un array i tuoi dati che vuoi recuperare, che sono i dati che hai innanzi tutto nella tabella per quel determinato utente...Un esempio sarebbe:

    Codice PHP:
    session_start();

    //ESEGUO TUTTI I CONTROLLI DI INSERIMENTO USERNAME E PASSOWORD, SE L'UTENTE ESISTE PASSO SOTTO.....
    //.......

    //qui ho già cntrollato che l'utente esiste e la pass è giusta allora cosa faccio, inserisco nell'array i dati che voglio
    //ricavare per quella sessione, in questo caso $idUtente cioè $_POST['idUtente'] username $_POST['username']
    //etc..etc...
    $datiUtente = array('idUtente'=>$idUtente,
    'username'=>$username,
    'profilo'=>$profilo);
    //inserisco l'array nella sessione....la mia sessione è attiva
    $_SESSION['datiUtente']=$datiUtente;
    Per riprendere i valori ovviamente in tutte le pagine di login dovrò aprire la sessione ad inizio file, e mi basterà scrivere:

    Codice PHP:

    session_start
    ();
    //imposto $datiutente per il recupero dei dati
    $datiUtente = $_SESSION['datiUtente'];
    //in questo caso recupero il profilo che ho inserito prima nell'array
    $profilo = $datiUtente['profilo'];
    //se volessi l'id
    $id = $datiUtente['idUtente'];
    //etc...etc....

    Nel tuo caso le possibilità sono due, o nella tabella di Sql inserisci un campo profilo amministratore o utente o pincopallo e poi nel tuo codice inserirai

    Codice PHP:

    sessione_start
    ();
    $datiUtente=$_SESSION['datiUtente'];

    if (
    $datiUtente['profilo'] == "amministratore"){

    //fai questo codice
    }
    elseif (
    $datiUtente['profilo'] == "utente"){

    //fai questo codice
    }
    else{

    //Non sei abilitato
    }
    Oppure recuperndo l'id delle utente ed avendo ovviamente in tabella Sql le tue utenze puoi inserire un array di utenze ed abilitare le funzionalità nell'array, perchè questo?Mettiamo caso tu hai degli amministratori ma vuoi abilitare un utente particolare ad avere determinate funzioni, ma solo quell'utente e non tutti gli altri utenti, ti serve un array....Quindi un'altra possibile alternativa è:


    Codice PHP:
    session_start();
    $datiUtente=$_SESSION['datiUtente'];
    //Queste sono gli id abilitati alle funzionalità, puoi anche fare un file che chiami abilitazioni e lo includi nelle pagine che ti servono
    $abilitazioni = array{1,2,3,4,5,6,7,8};

    //adesso ovviamente recuperi l'id
    $idUtente = $datiUtente['idUtente'];

    //adesso permetti le funzionali a quell'id se appartiene all'array abilitazioni...quindi:

    if (in_array($idUtente, $abilitazioni)){

    //l'id è abilitato a queste funzionalità

    }
    else{
    //tutti gli altri id che non appartengono all'array

    }
    Ps:Nelle pagine di login avvenuto devi ricordarti di mettere sempre un check_login altrimenti saranno visibili esempio:

    Codice PHP:

    $session_start
    ();

    if (!isset(
    $_SESSION['datiUtente'])) {
    echo(
    'Non sei loggato, devi prima effettuare il Login per vedere queste pagine' . '<br>');
    exit ;
    //IMPORTANTE EXIT ALTRIMENTI NON SI BLOCCA
    }
    Ciao spero sia utile....
    Ultima modifica di fractalcosmo : 06-07-2015 alle ore 10.38.07

  9. #9
    Guest

    Predefinito

    Grazie davvero per la tua risposta. Appena ho un attimo faccio una prova.

  10. #10
    Guest

    Predefinito

    Ho provato il tuo codice, ma se provo a modificare la classe inserendo l'array, non mi permette più di visualizzare la pagina di login e mi restituisce un errore.
    Ho pensato che, magari, potrei inserire il tuo codice qui:

    Codice PHP:
    public function is_logged(){
    return isset(
    $_SESSION['auth']);
    }

    // set login
    protected function set_logged($id_user){
    $_SESSION['auth'] = $id_user;
    return;
    }

    // access denied
    public function access_denied(){
    if(!
    $this->is_logged()){
    header("location: ".$this->Urls['login_page']."?message=14");
    exit;
    }
    return;
    }

    protected function
    set_username($username){
    $_SESSION['username_logged'] = $username;
    return;
    }

    public function
    get_username(){
    return isset(
    $_SESSION['username_logged']) ? $_SESSION['username_logged'] : '';
    }
    Dove lo posso mettere? Dopo l'ultima funzione o da qualche altra parte?

  11. #11
    Guest

    Predefinito

    Ehh si a questo punto ti conviene inserire un altro metodo per esempio public function abilitazioni e gli passerai l'id, $_SESSION['idUtente'], all'interno del metodo inserirai l'array delle utenze abilitate e ti farai restituire TRUE....lo recupererai una volta instanziata la classe semlicemente con un
    if (!$MiaClasse->abilitazioni()){

    //Tutte le matricole che non sono abilitate....

    }

    Farei una cosa di questo genere...

    PS:Ops stavo rileggendo, ma tu intendi l'array per la sessione non per le abilitazioni?Ahh avevo capito male a quale array ti riferivi, ma se vuoi fare una classe per la sessione ovviamente ti metti i costruttori e recuperi con i metodi tutti i tuoi $_SESSION, però a dire il vero non sono molto convinto che sia utile costruire una classe, perchè tu la sessione la inizializzi a login avvenuto, basta non lo fai mai più...tu dovrai sempre inserire l'array di sessione a login avvenuto è quello il momento in cui apri la sessione, nelle altre pagine recuperi i valori.Anche perchè nel momento in cui tu fai session_start() già stai inizializzando la sessione, lo vedo un pò come un lavoro doppio a dire il vero.
    http://www.sergiorinaudo.com/session...alita-di-base/

    Ciao
    Ultima modifica di fractalcosmo : 06-07-2015 alle ore 13.45.07

  12. #12
    Guest

    Predefinito

    Ho dato un'occhiata all'articolo che mi hai allegato. Ti ringrazio. Mi sono chiarito un po' meglio le idee. Adesso provo a fare come mi hai consigliato tu.

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •