Frage

Ich habe eine Seite ASP.NET MVC, die unten mit Formularauthentifizierung gesperrt ist. Die web.config hat

<authentication mode="Forms">
    <forms defaultUrl="~/Account/LogOn" loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

Keiner meiner anderen Seiten als Account / LogOn kann angezeigt werden, wenn der Benutzer authentifiziert ist.

Jetzt versuche ich, PayPal IPN auf meiner Website und hinzuzufügen, um zu tun, dass ich zwei Seiten haben muß, die PayPal-Zahlungsbestätigung behandeln und danke Seite. Diese beiden Seiten benötigen für anonyme Benutzer zur Verfügung stehen.

Ich würde diese Seiten wie Controller-Aktionen werden von meinem Konto-Controller. Gibt es eine Möglichkeit, ein Attribut auf bestimmte Aktionsmethoden anwenden kann, die sie für anonyme Benutzer zur Verfügung zu stellen? Ich fand einen mehr Beiträge hier, dass der Versuch, das zu tun, aber es gab die meisten Leute das Gegenteil Szenario wollten.

Grundsätzlich möchte ich Klasse AccountController kann für die meisten Methoden bis auf wenige Ausnahmen keine Berechtigung haben. Im Moment sieht es so aus nur die Anmelder-Methode zur Verfügung, um anonyme Benutzer.

War es hilfreich?

Lösung

Ja, Sie können. In Ihrem Account gibt es ein [autorisieren] -Attribut entweder auf Klassenebene oder auf bestimmte Methoden (auf die gesamte Steuerung beschränkt zu machen).

Um bestimmte Aktionen machen eingeschränkt Sie einfach das Autorisieren-Attribut auf die Methoden verwenden, die diese Aktionen handhaben, und lassen Sie die Controller-Klasse nicht beschränkt.

Hier sind ein paar Beispiele ... hoffe, es hilft

Um Benutzer benötigen um sich einzuloggen, verwenden Sie:

[Authorize]
public class SomeController : Controller

// Or
[Authorize]
public ActionResult SomeAction()

Um den Zugriff für bestimmte Rollen zu beschränken, zu verwenden:

[Authorize(Roles = "Admin, User")]
public class SomeController : Controller

// Or
[Authorize(Roles = "Admin, User")]
public ActionResult SomeAction()

Und, um den Zugriff für bestimmte Benutzer, zu verwenden:

[Authorize(Users = "Charles, Linus")]
public class SomeController : Controller

// Or
[Authorize(Users = "Charles, Linus")]
public ActionResult SomeAction()

Wie Sie sehen können, können Sie entweder das Attribut auf Klassenebene verwenden oder bei Verfahren Ebene. Ihre Wahl!

Andere Tipps

Ich glaube nicht, gibt es eine „Unauthorize“ Attribut, das auf Maßnahmen angewendet werden können, und wenn Sie nicht wollen, platzieren „[autorisieren]“ auf alle bis auf zwei Aktionen in einem Controller versuchen Sie Folgendes:

Hier sind zwei Methoden, die ich denken kann:

1- Location-Attribut in Web.config (nicht sicher, ob dies mit MVC Routing usw. funktionieren wird.)

Nach dem

<system.web> stuff </system.web>

in web.config-Datei die folgende:

  <location path="Account/ActionOne">
     <system.web>
           <authorization>
              <allow users ="*" />
          </authorization>
      </system.web>
  </location>

Wo Konto / ActionOne ist der Name des Aktionsmethode Sie den anonymen Zugriff geben möchten. Für die zweite Aktion, den obigen Code kopieren und direkt nach dem Einfügen und den Namen der Aktion ändern.

Ich bin mir nicht sicher, ob dies wegen der MVC Routing usw. funktionieren wird, aber probieren Sie es aus.

2- Basissteuerung

Wenn die vorherige Lösung nicht funktioniert hat, die beste Wahl wäre, ein Basis-Controller zu erstellen, die mit dem Autorisieren-Attribute versehen ist:

[Authorize]
public class AuthorizeControllerBase : Controller {}

Dann haben alle Ihre Controller erben von ihm:

public class AccountController : AuthorizeControllerBase
{
      // your actions etc.
}

Dies wird jeder Controller machen, die von AuthorizeControllerBase erbt eine Zulassung / Anmeldung in alle Methoden aufrufen.

Dann müssen Sie von Ihrem web.config entfernen

Statt alle Ressourcen auf Ihrer Website standardmäßig zu sichern und dann nach einer Möglichkeit, die anonymen Zugriff für einzelne Ressourcen zur Verfügung zu stellen, sind Sie wahrscheinlich besser dran, den umgekehrten Weg nehmen. Nicht Autorisierungsregeln in Ihrem web.config angeben, Authorization Filter verwenden (siehe Mickel Antwort) einzelne Regler zu sichern und / oder Aktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top