2009-09-28 9 views
10

Ho un backend di comunità esistente e mi piace usare Umbraco per il mio livello di presentazione. Come posso implementare il login/logout con l'autenticazione dei moduli .Net? (Non voglio usare la funzionalità Member). Ho diversi tipi di utenti che ottengono l'accesso a diversi tipi di pagine. Come posso controllarlo? Controllo dell'utente?autenticazione umbraco

risposta

18

Umbraco utilizza il modello di provider di ruolo/membro ASP.NET per la sua appartenenza sistema, ed è un passo abbastanza semplice per scambiare quello predefinito per la propria implementazione. Ho fatto questo in passato dove volevo autenticare i membri contro un negozio di Active Directory ma non posso immaginare che sia molto più difficile da autenticare contro un database personalizzato.

Il vantaggio è che si ottiene la completa integrazione con il sistema di appartenenza di Umbraco e, utilizzando un fornitore di ruoli personalizzato, gli editor saranno in grado di limitare le pagine utilizzando le funzioni di modifica delle pagine incorporate, anziché dover agganciare i tuoi controlli di sicurezza.

Si dovrebbe essere in grado di creare un semplice provider di appartenenze estendendo l'UmbracoMembershipProvider classe e l'override del metodo ValidateUser. Non l'ho fatto da solo, ma conosco altri che lo hanno fatto.

Per eseguire l'autenticazione con un fornitore di ruolo personalizzato, è necessario creare una classe derivata da RoleProvider. I metodi sarete interessati a sovrascrivendo sono - IsUserInRole, FindUsersInRole, GetAllRoles e GetRolesForUser.

Ecco un collegamento a Scott Guthrie blog post che contiene più informazioni sull'API del provider di quante tu abbia mai bisogno di sapere, incluso il codice sorgente per i provider predefiniti.

+0

sarebbe la vostra mente elaborare su come creare il mio modello di provider utente/ruolo? –

+0

Abbiamo aggiunto qualche informazione in più sul modello del provider che si spera possa dare una mano. – richeym

1

Ho usato due approcci sui miei siti di umbraco. Entrambi gli approcci includono controlli utente per il login e il logout che sono responsabili per l'autenticazione di un utente con una soluzione personalizzata e le credenziali di compensazione rispettivamente. Aggiungo anche, per entrambi gli approcci, un attributo umbracoMembersOnly a tutti i tipi di documenti che voglio proteggere.

Nel primo approccio, ho verificato ogni singolo modello per vedere se l'utente era limitato o meno dall'accesso. Per astrarre questo, ho creato una classe siteuser con un metodo isMember o isLoggedIn che era disponibile in tutto il sito e che poteva essere chiamato da una macro XSLT o User Control. Il vantaggio di questo approccio è che posso personalizzare i messaggi personalizzati su ciascun modello piuttosto che fornire semplicemente la stessa pagina di accesso negata.

Il secondo approccio - che è quello che preferisco ora - se creare una macro Permessi che è responsabile del controllo del diritto dell'utente di accedere a qualsiasi pagina (es. Controlla un attributo umbracoMembersOnly e, se è vero, controlla una sessione variabile). Questa macro viene inclusa nel modello principale e quindi viene eseguita su ogni modello. Se l'utente non ha il permesso di accedere alla pagina corrente, reindirizzamento alla stessa pagina ma con un? Alttemplate = RestrictedPage o simile aggiunto alla stringa di query. (Assicurati che la macro Permessi controlli un alttemplate = RestrictedPage nella stringa di query, o finirai in un ciclo infinito di reindirizzamenti.)