Newsgroup: it.comp.www.php
Titolo: sistema di gestione privilegi

dunque ho studiato un pò ho visto che tramite grant e revoke posso risolvere
una buonissima parte dei  miei problemi.
Putroppo da quel che ho capito non posso metterlo in pratica perchè 
normalmente ho a disposizione solo un utente.
Ora mi serve un consiglio :
Vorrei gestire il tutto tramite dei gruppi il problema che si pone olre a 
come creare le tabelle
e come usarle
io dovrei gestire permessi differenti in base ad un modulo lettura, 
scrittura, cancellazione, protezione a livello di riga
mi chiedo come potrei gestire una cosa del genere ? un dei problemi che mi 
si pone e come gestire i
gruppi ed evitare collisioni in quanto un utente può far parte di più gruppi
sinceramente sono all'asciutto non trovo il modo di poter capire in base ad 
impostazioni
discordanti chi ha priorità o no,faccio un esempio :
user A fa parte di ADMIN E RELATORE
admin può fare tutto
relatore può operare solo sulla tabella news
ecco un esempio che mostra come le "regole" possono andare in conflitto.
mi chiedo generalmente in questi casi come si gestisce il tutto ?
grazie ciao

 ad impostazioni discordanti chi ha priorità o no,faccio un esempio :
Dunque, devi fare 3 tabelle:
1 - tabella degli utenti
2 - tabella dei gruppi, con relative info sui permessi
3 - tabella di collegamento che ti dice quale utente fa parte di quale/i 
gruppo/i
ESEMPIO
UTENTI
idutente   nome     user   pass
1          Pippo    xxx    xxx
2          Pluto    xxx    xxx
3          Minnie   xxx    xxx
GRUPPI
idgruppo   nome       lettura   scrittura   eliminazione
1          admin      1         1           1
2          relatore   1         0           0
PARTECIPAZIONE
idutente   idgruppo
1          1
1          2
2          1
3          2
Come vedi, Pippo fa parte di 2 gruppi.
Quando un utente si logga, vai a vedere in quali gruppi è inserito.
Poi gestisci i permessi come meglio credi, ad esempio puoi fare un OR di 
tutti i permessi.
Esempio, Pippo fa login.
Dalla tabella UTENTI recuperi idutente=1 (quello di Pippo).
Poi, con idutente=1, recuperi da PARTECIPAZIONE i gruppi di cui fa parte: 1 
e 2.
Infine dalla tabella GRUPPI, selezioni 1 e 2 e per ogni permesso fai un OR.
lettura = 1 OR 1 = 1
scrittura = 1 OR 0 = 1
eliminazione = 1 OR 0 = 1
Quindi pippo ha tutti i permessi
Chiaro?
Ciao
Marco 

 Hai provato a chiedere al tuo provider se può risolvere la questione?
devo farlo

Un or intendi via sql ? ....
Io volevo dividere i due problemi uno relativo al db e l'altro al codice.
in definitiva dovrebbero andare paralellamente tu comunque mi hai dato degli 
spunti .
Se imposto le proprietà come 1-0 usando un or ho sempre la 1 il che va 
bene....
Ci ragiono un pò poi mgari risposto grazie mille intanto. 

 bene....
Io ho detto OR perchè così facendo dai priorità al gruppo con maggiori 
permessi.
Ma puoi fare anche diversamente.
Se usi AND dai priorità a quello con meno permessi.
Nell'esempio avresti:
lettura = 1 AND 1 = 1
scrittura = 1 AND 0 = 0
eliminazione = 1 AND 0 = 0
E quindi limiti i permessi.
Ovviamente devi pensarlo con più di 2 gruppi.
Ciao
Marco 

 ha scritto nel messaggio 
news:dgc3nj$4j9$1...@news.tiscali.fr...

(credo che siamo OT cmq )
sto provando una cosa del genre
select
BIT_OR(gruppi.news_read),
BIT_OR(gruppi.news_sel),
BIT_OR(gruppi.news_sel),
BIT_OR(gruppi.news_del),
BIT_OR(gruppi.news_contrriga)
from user,user_gruppi,gruppi
where iduser= 3
and
fkid_user  = 3
and
fkid_gruppo = idgruppo
sembra funzionare ...


Dunque ho risolto abbastanza bene.
Il mio scopo era dividere le due soluzioni.
Mi spiego volevo trovare un sistema che mi permetesse di poter usare una 
soluzion scarsa scarissima a livello di database e lo stesso per la parte di 
codice
così che mi potevo concentrare non sulla soluzione ma come venivano 
relazionate le risorse . Per farla breve e non fare lo spaccone (che non 
voglio assolutomente farlo)
Ho fatto due moduli
uno che gestisce il db ed uno che gestisce il codice
M1 < | |> M2 i due "viaggiano" in parallelo e comunicano tramite delle 
interfacce
così che posso migliorare una soluzione senza preocupparmi dell'altra e 
viceversa .
Volevo scrivere anche il codice (sono una classe semplice semplice) ma nn 
l'ho fatto proprio per evitare di mettere nella discussione elementi 
"implementativi"
Spero che questo thread serva anche ad altri se non altro come spunto.
Grazie a tutti ciao

 viceversa .
Beh, qualche dettaglio in piů potrebbe essere interessante.
Ciao
Marco