0

メンバーシップ ユーザーが特定のフォルダーへのアクセスを試み、それがロールによって許可されるようになった場合、システムは /Account/Index にリダイレクトされ、ログインとパスワードを再度要求されます。

ユーザーがすでにログインしていて、別の /controller/action にリダイレクトしたいだけなので、その動作を変更したいと思います。

ここから何か助けてもらえますか?前もって感謝します。

4

1 に答える 1

0

私はすべての 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);
}
于 2012-11-19T15:00:00.737 に答える