Umleiten von Unbefugter Seite Zugang in MVC zu Benutzerdefinierte Ansicht
Habe ich ein MVC-website, in denen dieser Zugang basiert auf verschiedenen Rollen. Sobald sich ein Benutzer am system anmeldet, können Sie unter navigation auf den Seiten, für die Sie autorisiert sind. Allerdings, einige Benutzer möglicherweise weiterhin versuchen, den Zugriff auf Seiten, die über eine direkte URL. Wenn Sie das tun, wird das system automatisch und leitet Sie auf die Login-Seite. Statt der Login-Seite möchte ich leiten Sie Sie zu einer anderen Ansicht (nicht autorisiert).
Web.Config noch folgender Eintrag:
<customErrors mode="On">
<error statusCode="401" redirect="~/Home/Unauthorized" />
<error statusCode="404" redirect="~/Home/PageNotFound" />
</customErrors>
<authentication mode="Forms">
<forms name="Development" loginUrl="~/Account/Login" cookieless="UseCookies" timeout="120"></forms>
</authentication>
Ich habe mich registriert, diese Routen in der Globalen.asax.cs als gut.
routes.MapRoute(
name: "Unauthorized",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Unauthorized", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "PageNotFound",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "PageNotFound", id = UrlParameter.Optional }
);
Wird es genug sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einigen Recherchen denke ich die einfachste Antwort auf dieses problem ist nur das erstellen von benutzerdefinierten genehmigen, die sehr ähnlich zu der von jbbi (aber das hat nicht funktioniert, da der "neue HttpUnauthorizedResult()" wird intern automatisch umleiten auf die login - mindestens in mvc 5 mit Identität)
und die Benutzung ist die gleiche wie die Standard-Autorisierung:
Dann nur die Dinge richtig zu tun, vergessen Sie nicht, senden der Http-code der error-Seite. f.e. wie dieser in die controller.
Es ist einfach, es funktioniert und sogar ich (.net mvc rookie) verstehen.
Hinweis: Es funktioniert nicht, das gleiche mit dem 401 - code-es wird immer über die 401 und intern umleiten auf die login -. Aber in meinem Fall ist, per definition, der 403 auch passend.
Mit folgender änderung funktioniert es
Und dann die Anwendung auf dem Controller oder die Aktion wie folgt:
Mit den oben Ansatz, den ich brauche, zu überdenken, alle controller/Aktionen und ändern Sie den Autorisierten Attribut! Auch einige Tests erforderlich sein.
Ich bin noch nicht sicher, warum Web.Config-route funktioniert nicht so, wie dieselben bereits in MVC-Dokumentation. Vielleicht hat sich etwas verändert in MVC 4!
Wahrscheinlich beste Weg das zu handhaben, ist eine zusätzliche Aktion, filter, leitet den Benutzer auf die angegebene Fehlerseite, wenn er gehört nicht zu der angegebenen Rolle.
Also, diese Methoden haben beide Filter angewendet: [Autorisieren] (ohne Rollen) zum Schutz von nicht authentifizierten Benutzern und dass Sie diese auf der Login-Seite. Und Ihr benutzerdefiniertes Attribut mit den Rollen. Code wie dieser hier (nicht getestet):
Gelten sowohl [Autorisieren] und [RoleFilter], um die Aktionen...
Hoffe, das hilft!
Denke ich, sollten Sie erstellen Sie Ihre eigenen Autorisieren filter-Attribut, die Erben des Standard-Autorisieren filter