2016-04-11 9 views
0

MVCアプリケーションを使用して、セッションに格納された値に基づいてコントローラのアクションにアクセスすることをユーザに制限するものがあります。MVCコントローラのユーザをリダイレクト

次のように私が実装している:

public partial class MyBookingController : CruisesDesktopControllerBase 
{ 
    private bool CheckLoggedIn() 
    { 
     return MyBookingSessionInfo.OzBookingId > 0; 
    } 

    public virtual ActionResult Summary() 
    { 
     //Ensure user is logged in 
     if (!CheckLoggedIn()) 
      return RedirectToAction(MVC.MyBooking.Login()); 

     //Prepare the view model 
     SummaryViewModel summaryViewModel = new SummaryViewModel 
              { 
               OzBookingId = MyBookingSessionInfo.OzBookingId 
              }; 

     return View(summaryViewModel); 
    } 

} 

ので、代わりのテストは、私が保護したいコントローラのアクションの上部に、コントローラのアクションがで注釈を付けることができ、これを行う方法があるかどうやって"ログインした制限"を実施してifテストブロックを削除する何らかの方法?

+0

可能な複製を失敗したときにロジック - 認可ロジック
HandleUnauthorizedRequest(AuthorizationContext)をhttp://stackoverflow.com/questions/746998/override-authorize-attribute-in-asp-net-mvc) – Steve

+0

はい、 '[Authorize]'属性を使用します。 –

+0

@StephenMuecke [Authorize]は、この場合私がそうでないMS認証パイプラインの使用を前提としています。 – TheEdge

答えて

3

カスタムAuthorizeAttributeを作成し、AuthorizeCoreメソッドを上書きすることができます。

public class AuthorizeUserAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return /* custom logic */;   
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" })); 
     } 
    } 
} 

次に、この属性をアクションに追加します。

[AuthorizeUser] 
public virtual ActionResult Summary() 
+0

それは物事の認可の一部です。承認が失敗したときにリダイレクトがどこで行われるかを制御するにはどうすればよいですか? – TheEdge

+0

それはあなたの '/ *カスタムロジック* /' –

+0

@BrendanGreenです。それはブーリアンを返します。だから私は偽を返すと言うことができます。リダイレクト先の制御方法を教えてください。 – TheEdge

0

あなたはAuthorizeAttributeを継承し、次の方法AuthorizeCore(HttpContextBase)上書きすることができます - (認証は、[ASP.NET MVCで承認属性をオーバーライド]の

public class CheckLoggedInAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     //Authorization logic Here. You can access the session using httpContext. Return false if your authorization fails 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     //Logic when authorization fails, modify the ViewResult or something. 
     base.HandleUnauthorizedRequest(filterConext) 
    } 
} 
関連する問題