将不允许按角色将用户重定向到某个文件夹到另一个 /controller/Action



如果成员资格用户尝试访问特定文件夹,并且角色现在允许该文件夹,则系统会重定向到/Account/Index 并再次要求登录名和密码。

我想改变这种行为,因为用户已经登录,我只想重定向到另一个/controller/action。

我可以从这里得到一些帮助吗?提前谢谢。

我在我所有的Web应用程序中都做了类似的事情。 如果用户已通过身份验证,但不符合查看页面的安全要求,我将抛出 HTTP 403 异常,然后显示 403 异常的特定视图。

这是我的自定义授权属性中的代码片段:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
    if (filterContext.HttpContext.Request.IsAuthenticated) {
        //If the user is authenticated, but not authorized to view the requested page (i.e. not a member of the correct group), return an HTTP 403 exception.
        throw new HttpException(403, string.Format("The user {0} was not authorized to view the following page: {1}", filterContext.HttpContext.User.Identity.Name, filterContext.HttpContext.Request.Url));
    } else {
        base.HandleUnauthorizedRequest(filterContext);
    }
}

这是我的 Global.asax 中的片段,我在其中实际执行视图响应(这假设存在一个ErrorController,然后是一个名为 Error403 的视图:

protected void Application_Error() {
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    Response.Clear();
    Server.ClearError();
    var routeData = new RouteData();
    routeData.Values["controller"] = "Error";
    routeData.Values["action"] = "Error500";
    Response.StatusCode = 500;
    Response.TrySkipIisCustomErrors = true;
    if (httpException != null) {
        Response.StatusCode = httpException.GetHttpCode();
        switch (Response.StatusCode) {
            case 403:
                routeData.Values["action"] = "Error403";
                break;
            case 404:
                routeData.Values["action"] = "Error404";
                routeData.Values["message"] = httpException.Message;
                break;
            case 500:
                routeData.Values["action"] = "Error500";
                break;
        }
    }
    IController errorsController = new ErrorController();
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
    errorsController.Execute(rc);
}

相关内容

最新更新