2009-07-23 5 views
9

Ich habe eine MVC-Website auf IIS6 erstellt. Ich habe die integrierte ASP.NET-Sicherheit ohne Mitgliedschaft verwendet, so wie sie in der Vorlagenlösung implementiert wurde. Es ist einfach, einen Contoller oder eine Aktion zu sichern, aber jetzt muss ich die Benutzerverwaltung einem Administrator offen legen, der bei der Site angemeldet ist. Ich verstehe, dass die eingebauten ASP-Steuerelemente dafür nicht "Best Practice" sind und ein Hund sind, um zu arbeiten. Was ist die beste Vorgehensweise, um Benutzerverwaltung über eine ASP.NET MVC-Anwendung anzubieten?Wie stelle ich die integrierte Sicherheits- und Benutzerverwaltung einer MVC-Anwendung zur Verfügung?

Ich überlegte, das Entity Framework zu verwenden und es mit den unzähligen gespeicherten Procs zu verbinden. aber das scheint peinlich. Ich sehe Optionen für AccountMembershipService und FormsAuthenticationService. Das nutzt der vorhandene Projekt-Account-Controller. Aber ich bin mit beiden nicht einverstanden.

Ich kann mir nicht helfen, aber denke, dass dies bereits aus der Projektvorlage hätte sein sollen. Dies ist ein grundlegender Bestandteil jeder Website und Sie erhielten 15%, warum nicht den Rest?

+0

Welche Version von IIS verwenden Sie? Ich bin mir ziemlich sicher, dass IIS 7 etwas für die Benutzerverwaltung eingebaut hat. – Perhentian

+1

Vielleicht sollten Sie nur Ihre Frage aktualisieren, anstatt viele Kommentare zu veröffentlichen, macht es lesbarer für die Leute, die versuchen, Ihre Frage zu beantworten :) – Peter

Antwort

0

Ich habe Benutzerauth jetzt in einer etwas gesunden Art und Weise arbeiten. Die größte Hürde zu überwinden ist, dass es in Ordnung ist, die Mitgliedschaftsklassen zu verwenden, obwohl ich nicht den Profilaspekt der Mitgliedschaft verwende. Es ist einfach, den Benutzernamen zu erhalten und Membership.GetUser (UserName) zu machen. Dann können Sie viele Dinge tun, wie Unlock, Approve/Disapprove, ändern Sie das Passwort und ändern Passwort Frage/Antwort ... alle Grundlagen, die ich brauche.

Hier sind die Grundlagen:

'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) 

und das ist meist alles, was es auch ist es

1

Soweit ich das beurteilen kann, verwenden Sie SqlMembershipProvider als Ihre Mitgliedschaft Provider-Implementierung. Ich würde dringend empfehlen, dass Sie einige der Methoden von MembershipUser und MembershipProvider Klassen (wie CreateUser, etc) zu erreichen, was Sie versuchen zu tun, anstatt mit den zugrunde liegenden Datenbanktabellen für verwendet zu arbeiten die Umsetzung.

Sie können auch einen Blick auf this article für eine eingehende Einführung zu ASP.NET der Mitgliedschaft, Rollen und Profil Anbieter.

+0

das klingt wie die Gegend, wo ich ein wenig ging. Danke für den Artikel. Ich denke, dass die MVC nur einen Teil dieser Funktionalität nutzt, und ich möchte vermeiden, den gesamten Mechanisum der Mitgliedschaft zu benutzen. Aber vielleicht ist das eine schlechte Idee, wir werden sehen. – DrydenMaker

+0

Ich wollte auch anmerken, dass ich Tutorials wie diese vermieden habe, weil sie nicht wirklich zum MVC passen. Guter Artikel, ich klärre einige Dinge für mich. – DrydenMaker

+0

Ich stelle fest, dass das Lernprogramm nicht mit der Denkweise von MVC übereinstimmt, aber es gibt Ihnen die Grundlagen der Handhabung von Mitgliedschafts-, Rollen- und Profilobjekten, die Sie zum Erstellen Ihres MVC-Projekts verwenden können. Ich weiß, dass es ein PITA ist, kein Starterkit für die Mitgliedschaftsverwaltung im Paket mit ASP.NET MVC zu haben. Angesichts der Entwicklungshistorie ist die Tatsache, dass der [Authorize] -Filter sogar out-of-the-box existiert, vermutlich deshalb, weil es für das MVC-Team einfach zu implementieren war. Also, ich schätze, Sie sollten sich mehr auf die Standard-MVC-Vorlage als Demo als auf einen Ausgangspunkt verlassen. – paracycle

1

prüft dieses Projekt auf CodePlex out: ASP.Net MVC Membership Starter Kit

+0

Jemand wird sich darum kümmern, warum er abgelehnt wurde? AFAIK Dieses Projekt ermöglicht es Ihnen, Mitgliedschaftsbenutzer und Rollen in MVC zu bearbeiten. (Wenn es wirklich falsch ist, werde ich die Antwort löschen) –

+0

Ich weiß nicht, warum es abgelehnt wurde, aber ist das ein offizieller Teil der MVC? Es scheint, als hätte es getan werden sollen, das ist in einer vollständigeren Art und Weise. – DrydenMaker

+0

Ich sehe einen Grund, ich denke das ASP.Net MVC Mitgliedschaft Starter Kit ist in C# geschrieben, während ich VB2k8 benutze. – DrydenMaker

0

Ich weiß nicht, über „best practice“, aber das ist, wie ich es tun würde (und wie ist es eine Art geschrieben in „Professional ASP.NET MVC 1.0“):

Sie sollten einen benutzerdefinierten Profilprovider und Mitgliedschaftsanbieter haben (oder den Standard), damit dies funktioniert.

Erstellen Sie einen Controller, der alle Aktionen der Mitgliederverwaltung behandelt, z. MemberAdminController

Dieser Controller sollte das Attribut Authorize [Roles = "Administrator"] haben, damit alle Aktionen in diesem Controller nur behandelt werden, wenn sich der Benutzer in der Administratorrolle befindet.

Jetzt können Sie die CRUD-Ansichten und -Aktionen so erstellen, wie Sie nur diesen Controller verwenden möchten.

+0

Das ist die Richtung, in die ich gehe. Ich denke, dass die Projektvorlage eine Reise ist, da sie die Anmeldung und alles erlaubt, ABER die Verwaltung offen legt. Es ist ein sicherer Weg, um viele schlechte Anwendungen da draußen zu bekommen. – DrydenMaker

+0

Alles hängt davon ab, wie Sie Ihre Authentifizierung implementieren. Ich denke nicht, dass es eine Reise ist, das asp.net mvc-Framework gibt dem Entwickler viel mehr Verantwortung, da viele Dinge nicht in einer Standard-Weise behandelt werden, die Webforms getan haben. Wenn Sie für den Rest Ihrer Site keine Authentifizierung benötigen, geben Sie sie ihnen einfach nicht. Sie müssen immer ein öffentliches Anmeldeformular für den Zugriff auf Ihren Administrator verfügbar machen ... Dies ist kein Unterschied zu Webformularen. – Peter

Verwandte Themen