2010-06-19 2 views
1

Problème:Équivalent de classe de page de base dans ASP.NET MVC2? Venant d'un arrière-plan webforms

J'ai une application webforms où chaque page hérite de BasePage.cs J'ai aussi un autre AuthenticatedBasePage.cs de classe qui hérite de BasePage.cs

BasePage.cs a quelques code qui détecte si un cookie d'authentification par formulaire est défini et, le cas échéant, définit un indicateur booléen IsAuthenticated et un objet MyAppUser (possède uniquement des propriétés telles que name, age, gendery), ce qui signifie que chaque page du site peut voir la page est connectée ou non, et si c'est le cas, lisez les valeurs de MyAppUser. AuthenticatedBasePage a une fonctionnalité supplémentaire où si quelqu'un essaye de naviguer vers une page héritant de cette classe n'est pas authentifié, il est redirigé vers la page de connexion avec un ensemble de variables querystring 'returnurl'.

Je voudrais avoir une configuration similaire dans mon application MVC2. J'ai fait pas mal de lecture qui dit que je ne devrais pas référencer HttpContext dans mon BaseController.cs (dont tous mes contrôleurs héritent) car cela signifie que je ne peux pas le tester. Ma première question est, comment puis-je rendre les objets IsAuthenticated et MyAppUser disponibles pour chaque page? Deuxièmement, comment puis-je créer des pages auxquelles seuls les utilisateurs authentifiés peuvent accéder, et s'ils ne sont pas authentifiés, ils sont redirigés vers la page de connexion avec l'ensemble de variables returnurl querystring?

Un grand merci, A.

post-scriptum Je n'utilise pas le MembershipSchema, j'utilise seulement la méthode FormsAuthentication.SetCookie.

Répondre

0

Ce que vous voulez, c'est l'attribut Authorize. This article a une excellente explication de la façon de l'utiliser avec l'authentification par formulaires.

+0

Bonjour, j'ai déjà vu l'attribut Authorize mais il ne fait pas tout à fait ce que je veux qu'il fasse. Par exemple, s'il y a une page de profil d'utilisateur sur mon site, je veux qu'un bouton d'édition apparaisse si l'utilisateur actuellement connecté voit son propre profil d'utilisateur. Dans la vue, je voudrais accéder à <% = CurrentUser.UserId%> ou quelque chose à cet effet. L'utilisation d'une classe BasePage webforms a rendu cela facile, mais je ne suis pas sûr de savoir comment répliquer ce comportement dans MVC2. Mon meilleur effort consiste à créer un BaseViewModel avec une propriété CurrentUser, que je définis manuellement dans l'action du contrôleur. – romiem

+0

Avoir deux actions, PublicProfile et Profile. Si besoin est, ils peuvent toujours utiliser la même vue. – s1mm0t

Questions connexes