Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    implementazione funzione permessi utenti guida html.it

    Sto seguendo la guida di html.it per la gestione degli utenti, in particolare il capitolo sulla gestione dei privilegi:
    http://php.html.it/articoli/leggi/90...nti-con-php/8/

    volevo implementare qualche altra funzione oltre a quelle già presenti, in particolare vorrei riuscire ad estrarre tutti gli utenti che hanno un determinato privilegio.

    Ovviamente si potrebbe fare una query per ogni utente, ma non mi sembra assolutamente un modo efficace, qualcuno ha qualche idea su come poter fare?

    Mi servirebbe quella funzione perchè se volessi eliminare un privllegio dovrei prima toglierlo agli utenti che lo posseggono.
    Ringrazio tutti in anticipo
    ciao

  2. #2
    do qualche info in più per quelli che non conoscono la guida:

    ogni permesso ha un suo id che corrisponde ad una potenza di 2.
    quindi

    1
    2
    4
    8

    che in binario:
    1>00000001
    2>00000010
    4>00000100
    8>00001000

    quindi il privilegi di un utente equivalgono alla somma delle id dei singoli privilegi

    es se ho come privilegi 5 vuol dire:
    5>00000101 che altro non è che l'OR tra 1 e 4.
    -------------------
    1>00000001
    4>00000101

    quindi ho due tabelle:
    permessi
    utenti

    in permessi avrò
    id(potenza di 2)
    descrizione(testo qualsiasi)

    utenti
    id_utente
    user
    pass ecc
    privilegi(somma delle id dei privilegi corrispondenti nella tabella privilegi)

    ora io con meno query possibili vorrei riuscire ad ottenere le id_utente degli utenti che hanno un determinato privilegio.
    Quindi io vorrei passare l'id del privilegio e avere come risultato l'elenco degli utenti che lo hanno.

    Spero di aver dato qualche informazione in +, attendo il vostro aiuto

    PS quesot dovrebbe spiegare il funzionamento:
    codice:
    $miei = 5; 
    $confronto = 4; //se mettete 4 o 1 va, con altre potenze di 2 no
    
    if(intval($miei) & intval($confronto))
    { echo "si"; } else { echo "no"; }

  3. #3
    io sono quello che non capisce mai le domande VVoVe: , ma se ho capito bene potrebbe bastarti DELETE from 'database' WHERE 'id'=privilegio e poi cancelli il permesso..
    User senza un senso

  4. #4
    come idea potrebeb andare, solo che potrebbe dar problemi con la configurazione del mio database:

    Codice PHP:
    CREATE TABLE `permessi` (
      `
    idint(10unsigned NOT NULL default '0',
      `
    nomevarchar(100NOT NULL default '',
      `
    descrizionetext NOT NULL,
      
    PRIMARY KEY  (`id`)
    TYPE=MyISAM

    Codice PHP:
    CREATE TABLE `utenti` (
      `
    idint(10unsigned NOT NULL auto_increment,
      `
    namevarchar(30NOT NULL default '',
      `
    surnamevarchar(30NOT NULL default '',
      `
    usernamevarchar(30NOT NULL default '',
      `
    passwordvarchar(32NOT NULL default '',
      `
    permessiint(11NOT NULL default '0',
      `
    tempset('0','1'NOT NULL default '',
      `
    regdatevarchar(11NOT NULL default '',
      `
    uidvarchar(32NOT NULL default '',
      
    PRIMARY KEY  (`id`),
      
    KEY `username` (`username`,`password`)
    TYPE=MyISAM AUTO_INCREMENT=
    come vedi anche la tabella utenti ha il campo id, e se ho capito bene la query da te proposta eliminerebbe anche l'utente che avesse la stessa id del privilegio giusto?

    EDIT:
    ora che ci penso non credo vada bene la tua soluzione perchè prima di elimare il privilegio dalla tabella privilegi devo sottrarre il suo id dai privilegi dell'utente...

  5. #5
    non capisco il perchè.. mal che vada prendi gli utenti col determinato permesso e WHERE id=x poi fai delete col nome.. DELETE FROM y WERE username = $username

    e $username non sarà altro che il risultato del row.. mi sn spiegato male eh? :-D
    User senza un senso

  6. #6
    Prima di eliminare il record dalla tabella privilegi devo sottrarre l'id del privilegio al totale dei privilegi di tutti gli utenti che hanno quel privilegio.
    Quindi devo fare una cosa del genere:

    ID del privilegio da eliminare: 2

    devo trovare tutti gli utenti che hanno quel privilegio:
    es1 pinco ha 6 ([2]+4)
    es2 pallino ha 3 (1+[2])

    aggiorno i record di questi utenti:

    pinco 6-2=4
    pallino 3-2=1

    e ora posso eliminare il record del privilegio.
    Spero di essere stato + chiaro ora.
    Grazie per l'aiuto, se hai altre idee scrivi pure ^^

  7. #7
    Risolto così per ora:
    Codice PHP:
    $sql "SELECT id, name, permessi FROM utenti";
        
    $dati mysql_query($sql);
        while (
    $utente mysql_fetch_array($datiMYSQL_ASSOC))
        {
            
    $attuali $utente['permessi'];
            
            if(
    intval($attuali) & intval($permesso))
            {
                
    $attuali -= $permesso
                
    license_change($utente['id'], $attuali);
            }
        }    
        
    $sql mysql_query("DELETE FROM permessi WHERE id='{$permesso}' LIMIT 1") or die (mysql_error()); 
    se qualcuno ha una soluzione migliore ben venga ^^
    ciao a tutti

  8. #8
    mosichista questo metodo O_O ( buio totale :-) )
    User senza un senso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.