diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index df0dc8a72..4a46a4288 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -86,6 +86,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/AuthenticationRedirectionFilter.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/AuthenticationRedirectionFilter.cs new file mode 100644 index 000000000..faa845a4b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/AuthenticationRedirectionFilter.cs @@ -0,0 +1,30 @@ +using System.Web.Mvc; +using System.Web.Mvc.Filters; +using System.Web.Routing; +using Orchard.Mvc.Filters; + +namespace Orchard.Users.Services { + + /// + /// This class is responsible for redirecting the user to the authentication page + /// of the current tenant. + /// + public class AuthenticationRedirectionFilter : FilterProvider, IAuthenticationFilter { + + public void OnAuthentication(AuthenticationContext filterContext) { + } + + public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext) { + if (filterContext.Result is HttpUnauthorizedResult) { + filterContext.Result = new RedirectToRouteResult( + new RouteValueDictionary + { + { "controller", "Account" }, + { "action", "AccessDenied" }, + { "area", "Orchard.Users"}, + { "ReturnUrl", filterContext.HttpContext.Request.RawUrl } + }); + } + } + } +} \ No newline at end of file diff --git a/src/Orchard/UI/Admin/AdminFilter.cs b/src/Orchard/UI/Admin/AdminFilter.cs index cd78c4e37..a5b37d9da 100644 --- a/src/Orchard/UI/Admin/AdminFilter.cs +++ b/src/Orchard/UI/Admin/AdminFilter.cs @@ -22,6 +22,7 @@ namespace Orchard.UI.Admin { if (IsAdmin(filterContext)) { if (!_authorizer.Authorize(StandardPermissions.AccessAdminPanel, T("Can't access the admin"))) { filterContext.Result = new HttpUnauthorizedResult(); + filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true; } Apply(filterContext.RequestContext);