2012-05-04 8 views
1

私は、サンプルページA、B、C、DのWebサイトを持っています。登録されています。残りのページにアクセスするには、ユーザーが他のユーザーとの間で支払いを行うなど、いくつかの参加手続きを完了する必要があります。Asp.net MVCユーザーが特定の条件でアプリケーション全体にアクセスするのをブロックする

簡単な方法は、現在完了しているすべてのページにチェックを追加して、リクエストされたページB、C、D ...がすべての参加手続きを完了した場合にのみ表示されるようにすることです。これにより、既存のすべてのページをもう一度やり直す必要があります。また、今後開発されるすべてのページでは、そのチェックを追加することを覚えておく必要があります。私はAuthorizeAttributeから継承したカスタム認可属性クラスを使用して、あなたがあまりにも多くのORがある見ることができるように

 else if (!SessionCache.FormalitiesCompleted) 
     { 
      //force completion of formalities 
      if (!(string.Equals(filterContext.ActionDescriptor.ActionName, "Index", StringComparison.InvariantCultureIgnoreCase) 
        || string.Equals(filterContext.ActionDescriptor.ActionName, "Options", StringComparison.InvariantCultureIgnoreCase) 
        || string.Equals(filterContext.ActionDescriptor.ActionName, "Index_B", StringComparison.InvariantCultureIgnoreCase) 
        || string.Equals(filterContext.ActionDescriptor.ActionName, "Index_C", StringComparison.InvariantCultureIgnoreCase) 
        && string.Equals(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, "Formalities", StringComparison.InvariantCultureIgnoreCase))) 
      { 
       string _action = filterContext.ActionDescriptor.ActionName; 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Formalities", action = _action, area = "FormalitiesArea" })); 
      } 


     } 

以下のスニペットのようにそこにOnAuthorization上書き方法でチェックを作っこの周りに来て

IFの条件。私は、形式の複雑さが増すにつれてこれが増加すると考えています。

手続きが完了しない限り、サイトの他のページにアクセスしないようにするためのより良い方法はありますか?

お時間をいただきありがとうございます。

答えて

0

アクチンフィルタを作成して、アクセスを制限するアクションまたはクラスにも適用できます。あなたのアクションフィルタでは、OnActionExecutingメソッドをオーバーライドしてそこにチェックロジックを実装する必要があります。あなたは、あなたのコントローラで[オーソライズ]注釈を使用する方法についてこのサンプルのうちlink

0

チェックをしたいものは何でもに基づいてこれらのビューへのアクセスを許可または拒否することができますか?独自のAuthorizeAttributesを作成することにより、使用または作成する任意のMembershipProviderに基づいてアクションごとの承認をカスタマイズすることができます。

2

[Authorize attribute]http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspxこの属性を持つアクションを装飾すると、ログインしたユーザーだけがアクセスでき、他のユーザーはログインページにリダイレクトされます。有料/登録ユーザー

、私はこれを継承し、PaidUserAuthorize属性になるだろう:支払いページに未払いのユーザーをリダイレクトします

[PaidUserAuthorize(Roles = "PaidUser", "Super User")]

public class PaidUserAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 

     if(filterContext.Result is HttpUnauthorizedResult) 
     { 
      filterContext.Result = new RedirectResult("/PaymentPage"); 
     } 
    } 
} 

ためのアクションを飾るに。

ユーザーが支払いした後、PaidUserロールに追加します。だから、彼らが再び行動に行くとき、彼らはアクセスを許可されます。

関連する問題