Implementazione dei profili utente

rated by 0 users
This post has 6 Replies | 3 Followers

Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
petrux Posted: 03-17-2009 10.01
Ciao a tutti,

ho una applicazione (diciamo web, ma non è proprio così...) che permette
due profili utente: 'admin' e 'user'. L'applicazione ha una architettura
3-tiers con un service layer. Ora, in base a quale utente è loggato, in
corrispondenza di certi eventi, l'applicazione deve fare certe cose (ad
esempio: se un 'user' compie una certa operazione deve inviare una mail
agli 'admin', ma se la compie un 'admin' non deve fare nulla). Come si
possono implementare certe politiche? Avete qualche rifeirmento/esempio?

Grazie in anticipo e buona giornata,
Giulio
--
http://www.giuliopetrucci.it
http://www.fujikomonamour.com
  • | Punteggio Post: 20
Top 25 Partecipanti
Maschio
Post 67
Punteggio 1.440

>L'applicazione ha una architettura 3-tiers con un service layer. Ora, in base a quale utente è loggato,
>in corrispondenza di certi eventi, l'applicazione deve fare certe cose (ad esempio: se un 'user'
>compie una certa operazione deve inviare una mail agli 'admin', ma se la compie un 'admin'
>non deve fare nulla). Come si possono implementare certe politiche? Avete qualche rifeirmento/esempio?

Se queste "azioni" corrispondessero a servizi specifici del service layer (1 azione=1 servizio), potresti usare AOP implementando la spedizione della mail come "cross cutting concern". Una considerazione implementativa: se il service layer fosse basato su WCF, l'interception potrebbe essere effettuata usando la Enterprise Library (noi in azienda facciamo così) o Spring (non ho esperienza diretta, ma un amico lo ha utilizzato per un progetto importante ed è soddisfatto)

--
.A
GUISA - http://www.guisa.org
UGIdotNET - http://www.ugidotnet.org
Read my blog at: http://blogs.ugidotnet.org/pape

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
Ciao Andrea,

andysal ha scritto:
> Se queste "azioni" corrispondessero a servizi specifici del service
> layer (1 azione=1 servizio), potresti usare AOP implementando la
> spedizione della mail come "cross cutting concern".

Purtroppo non è così.
Anyway, i concetti mi sembrano interessanti: hai qualche link a riguardo?

> Una considerazione
> implementativa: se il service layer fosse basato su WCF

Purtroppo non è così (bis). :-)

Ciao,
Giulio
--
http://www.giuliopetrucci.it
http://www.fujikomonamour.com
  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 243
Punteggio 3.383

Una cosa importante è infatti capire che granularità di protezione/Funzionalità ti serve. Ad esempio mi pare di avere capito che hai situazioni in cui la stessa funzione, chiamata da due ruoli differenti, può fare due cose differenti (Ad esempio se chiamata da un non admin deve loggare o fare cose etc)

Per prima cosa secnodo me bisogna centralizzare la gestione dei ruoli e degli utenti, ad esempio in asp.net l'utente corrente con windows forms è membership.getuser, ma poi se sei in un servizio WCF questo non è solitamente vero. Per cui una delle prime cose è farsi una propria classe che centralizza queste operazioni con funzioni del tipo IsUserInRole etc.

Poi è necessario creare un metodo con cui le operazioni eseguite cambiano a seconda dei ruoli/utente, per questo ti viene in aiuto l'inversione di controllo, anche se non in maniera cosi diretta. Ad esempio nel servizio, invece di iniziare a mettere codice del tipo if ruolo = "admin" then, che è poco flessibile, strutturare il tutto in modo che ad ogni richiesta al servizio si risolva tramite IoC la classe concreta che eseguirà l'operazione. Comunque AOP ti viene in aiuto in ogni caso, ad esempio puoi utilizzare attributi custom nei tuoi servizi e mettere un aspetto che esaminando questi attributi decide cosa fare.

Ad esempio, metti che hai una situazione del tipo, "In alcune operazioni se l'utente appartiene al ruolo X o Z devi loggare cosa ha fatto". Puoi fare un attributo chiamato LogIfIsInRole("Admin,user"). Poi tramite AOP inietti un aspetto che per ogni operazione controlla se è presente questo attributo, se è presente controlla i ruoli e se il ruolo attuale è tra uno di quelli desiderati logga il nome funzione e tutti i parametri.

Il consiglio è comunque di cercare di capire prima possibile che tipologia di protezione deve effettuare, in modo da non trovarti con una soluzione che poi non ti permette di implemetnare tutto.

Alk.

Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
Ciao alkampfer,

Innanzitutto grazie per la risposta

alkampfer ha scritto:
> Una cosa importante è infatti capire che granularità di
> protezione/Funzionalità ti serve. Ad esempio mi pare di avere capito che
> hai situazioni in cui la stessa funzione, chiamata da due ruoli
> differenti, può fare due cose differenti (Ad esempio se chiamata da un
> non admin deve loggare o fare cose etc)
[cut]

Perfetto: hai capito al 100%!

> Per prima cosa secnodo me bisogna centralizzare la gestione dei ruoli e
> degli utenti, ad esempio in asp.net l'utente corrente con windows forms
> è membership.getuser, ma poi se sei in un servizio WCF questo non è
> solitamente vero. Per cui una delle prime cose è farsi una propria
> classe che centralizza queste operazioni con funzioni del tipo
> IsUserInRole etc.

Ho fatto una cosa del genere.

> Poi è necessario creare un metodo con cui le operazioni eseguite
> cambiano a seconda dei ruoli/utente, per questo ti viene in aiuto
> l'inversione di controllo, anche se non in maniera cosi diretta. Ad
> esempio nel servizio, invece di iniziare a mettere codice del tipo if
> ruolo = "admin" then, che è poco flessibile, strutturare il tutto in
> modo che ad ogni richiesta al servizio si risolva tramite IoC la classe
> concreta che eseguirà l'operazione.

Considerato che l'applicazione a cui sto lavorando è un proto-prototipo
per ora ho implementato una cosa del genere. Ma faccio tesoro di quanto
c'è scritto di seguito...

> Comunque AOP

Uhm... links?

> ti viene in aiuto in
> ogni caso, ad esempio puoi utilizzare attributi custom nei tuoi servizi
> e mettere un aspetto che esaminando questi attributi decide cosa fare.

Uhm...links? Qualche esempietto?

Grazie,
Giulio
--
http://www.giuliopetrucci.it
http://www.fujikomonamour.com
  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 243
Punteggio 3.383

Questo fine settimana sono un po impegnato nel finire di preparare gli esempi per il workshop dotnetmarche, se riesco a trovare un attimo di tempo provo a fare un mini esempio, ma non prometto nulla che in questo periodo il tempo scarseggia :P

alk.

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
alkampfer ha scritto:
> Questo fine settimana sono un po impegnato nel finire di preparare gli
> esempi per il workshop dotnetmarche, se riesco a trovare un attimo di
> tempo provo a fare un mini esempio, ma non prometto nulla che in questo
> periodo il tempo scarseggia :P

dotnetMARHCE?
Ma perché non so mai nulla? :-)

Ciao,
Giulio
--
http://www.giuliopetrucci.it
http://www.fujikomonamour.com
  • | Punteggio Post: 5
Pagina 1 di 1 (7 elementi) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems