2009-07-23 9 views
9

Ho creato un sito Web MVC su IIS6. Ho usato la sicurezza ASP.NET integrata senza abbonamento, proprio come è stata implementata nella soluzione di template. È facile proteggere un controller o un'azione, ma ora ho bisogno di esporre la gestione degli utenti a un amministratore registrato nel sito. Capisco che i controlli ASP incorporati per fare questo non sono "best practice" e sono un cane per lavorare. Quindi, qual è la migliore pratica per offrire la gestione degli utenti tramite un'applicazione ASP.NET MVC?Come esporre la sicurezza e la gestione utenti integrate a un'applicazione MVC?

Ho pensato di utilizzare Entity Framework e collegarlo alla miriade di stored procs. ma sembra imbarazzante. Vedo le opzioni per AccountMembershipService e FormsAuthenticationService. Questo è ciò che utilizza il controller di account di progetto esistente. Ma, non sono fimilliar con entrambi.

Non posso fare a meno di pensare che questo dovrebbe essere già presente dal modello di progetto. Questa è una parte fondamentale di qualsiasi sito web e ti è stato dato il 15%, perché non il resto?

+0

Quale versione di IIS userete? Sono abbastanza sicuro che IIS 7 ha qualcosa in programma per la gestione degli utenti. – Perhentian

+1

Forse dovresti semplicemente aggiornare la tua domanda invece di postare molti commenti, lo rende più leggibile per le persone che cercano di rispondere alla tua domanda :) – Peter

risposta

0

Ho un'autenticazione utente che lavora in un modo un po 'sano di mente ora. L'ostacolo più grande da superare è che è corretto utilizzare le classi di appartenenza, anche se non sto utilizzando l'aspetto Profilo dell'appartenenza. È facile ottenere il nome utente e fare Membership.GetUser (UserName). Quindi puoi fare molte cose come Sblocca, Approva/Disapprova, cambia la password e cambia la password domanda/risposta ... tutte le basi di cui ho bisogno.

Qui ci sono le basi:

'get current logged in user 
Dim currentUser As MembershipUser = Membership.GetUser() 

'get current logged in user name 
Dim userName = currentUser.UserName 

'get current user email 
Dim userEmail = currentUser.Email 

'get a user to edit 
Dim editingUser = Membership.GetUser(UserName) 

'set the user email 
editingUser.Email = newEmail 
Membership.UpdateUser(editingUser) 

‘unlock user 
editingUser.UnlockUser() 

‘disapprove user 
editingUser.IsApproved = False 
Membership.UpdateUser(editingUser) 

‘approve user 
editingUser.IsApproved = True 
Membership.UpdateUser(editingUser) 

‘change pw 
editingUser.ChangePassword(oldPw, newPw) 

e questo è in gran parte tutto quello che c'è troppo esso

1

Per quanto ne so, si sta utilizzando SqlMembershipProvider come implementazione del provider di appartenenza. Vorrei suggerire di avere uno sguardo ad alcuni dei metodi di MembershipUser e MembershipProvider classi (come ad esempio CreateUser, ecc) per ottenere ciò che si sta cercando di fare, invece di lavorare con le tabelle del database sottostanti utilizzate per l'implemento.

È anche possibile dare un'occhiata a this article per un'introzione approfondita a Provider di Membership, Roles e Profilo di ASP.NET.

+0

che suona come l'area in cui sono andato un po '. Grazie per l'articolo. Penso che MVC utilizzi solo una parte di questa funzionalità, e voglio evitare di utilizzare l'intero meccanismo di Membership. Ma forse questa è una cattiva idea, vedremo. – DrydenMaker

+0

Volevo anche notare che ho evitato tutorial come questo perché non si adattano perfettamente all'MVC. Buon articolo però, chiarisco alcune cose per me. – DrydenMaker

+0

Mi rendo conto che il tutorial non si adatta alla mentalità di MVC ma fornisce le basi per gestire gli oggetti Membership, Ruolo e Profilo che è possibile utilizzare per creare il progetto MVC. Mi rendo conto che è un PITA a non avere uno starter kit per Amministrazione soci in bundle con ASP.NET MVC. Tuttavia, data la cronologia dello sviluppo, suppongo che il filtro [Authorize] sia già pronto all'uso perché è stato banale implementarlo per il team MVC. Quindi, suppongo che dovresti fare affidamento sul modello MVC predefinito più come demo che come punto di partenza. – paracycle

1

Dai un'occhiata a questo progetto CodePlex: ASP.Net MVC Membership Starter Kit

+0

Qualcuno si preoccuperà di commentare perché è stato downvoted? AFAIK questo progetto ti consente di modificare gli utenti e i ruoli di appartenenza all'interno di MVC. (Se è davvero sbagliato cancellerò la risposta) –

+0

Non so perché è stato votato in ribasso, ma è una parte ufficiale del MVC? Sembra come avrebbe dovuto essere fatto, cioè in modo più completo. – DrydenMaker

+0

Vedo una ragione, penso che lo Starter Kit ASP.Net MVC Membership sia scritto in C#, mentre sto usando VB2k8. – DrydenMaker

0

Non so di "best practice", ma questo è come vorrei farlo (e come è sorta di scritto in "Professional ASP.NET MVC 1.0"):

È necessario disporre di un profilo (o predefinito) ProfileProvider e MembershipProvider in posizione perché funzioni.

Creare un controller che gestisca tutte le azioni di gestione dei membri es. MemberAdminController

Questo controller deve avere l'attributo Autorizza [Ruoli = "Amministratore"] specificato, quindi tutte le azioni in questo controller verranno gestite solo se l'utente è nel ruolo Amministratore.

Ora è possibile creare viste e azioni CRUD come si desidera utilizzare solo questo controller.

+0

Questa è la direzione in cui vado. Penso che il modello di progetto sia una travistia dal momento che consente l'iscrizione e tutto, ma espone l'amministrazione. È un modo sicuro per ottenere un sacco di applicazioni scadenti là fuori. – DrydenMaker

+0

Tutto dipende da come si implementa l'autenticazione. Non penso che sia una travistia, il framework asp.net mvc dà allo sviluppatore molta più responsabilità perché molte cose non sono gestite in modo predefinito con le webform. Se non hai bisogno dell'autenticazione per il resto del tuo sito, semplicemente non darglielo. Devi sempre esporre un modulo di accesso pubblico per accedere al tuo amministratore ... questo non è diverso dalle webform. – Peter