2016-05-04 20 views
0

私は2つのエンティティは以下のように設定します:asp.net mvc5でカスタムathorization属性を作成する方法は?

public class Serial 
    { 
     [HiddenInput(DisplayValue=false)] 
     public int SerialID { get; set; } 
     [HiddenInput(DisplayValue=false)] 
     public string Id { get; set; } 
     [Required(ErrorMessage="Please provide your membership serial")] 
     [StringLength(16,ErrorMessage="This field can't be longer as of 16 characters.")] 
     public string UserSerial { get; set; } 
    } 

public class Subscription 
    { 
     [HiddenInput(DisplayValue=false)] 
     public int SubscriptionID { get; set; } 
     [Required(ErrorMessage="Please provide a subscription code.")] 
     public string AdminSerial { get; set; } 
    } 

私は次のシナリオと私のコントローラ内の私のアクション・メソッドを設計するために、カスタム認可属性を作成したいと思います:

UserSerialの値がシリアル番号にあるかどうか確認したいと思いますエンティティがサブスクリプションエンティティのAdminSerialの値と等しくない。 上記の条件が真となってActionResultメソッド自体を実行する必要がある場合は、それ以外の場合はAuthorizeAttributeを別のアクションメソッドにリダイレクトする必要がありますが、ここで試したことはありますが、何か不足していますか?

public class RequireSerial : AuthorizeAttribute 
    { 
     EFDbContext db = new EFDbContext(); 
     protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
     { 

      if (!db.Subscriptions.Any(s => s.AdminSerial.Equals(db.Serials.Any()))) 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Serials", action = "Create" })); 
      } 
      else 
      { 
       // Execute the Action method itself 
      } 
     } 
    } 

私はアクションメソッドの上にこのRequireSerialカスタムAUTHORIZE属性を入れてみましたが、何も実際に起こりません。

[RequireSerial] 
     public ViewResult Checkout() 
     { 
      return View(); 
     } 

助けてください。

答えて

-1

認証は基本的に「ブール値」です(正確に真のブール値ではありませんが、承認または失敗のいずれかを返します)。 これについては、MSDNの記事は非常に明確です。

Custom Authorization

+0

何をしたらいいですか? –

+0

カスタム認可のクラスを作成するときは、IsAuthorized関数をオーバーライドする必要があります。 –

0

あなたはOnAuthorizationHandleUnauthorizedRequestメソッドをオーバーライドする必要があります。 HandleUnauthorizedRequestは、ユーザが承認されていない場合、デフォルト実装のOnAuthorizationメソッドによって呼び出されます。 デフォルトの実装HandleUnauthorizedRequestredirectsユーザーログインページ。

EFDbContext db = new EFDbContext(); 
public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    //handle base authorization logic 
    base.OnAuthorization(filterContext);  

    //if user is not authorized (by base rules) simply return because redirect was set in 'base.OnAuthorization' call.  
    if (this.AuthorizeCore(filterContext.HttpContext) == false) 
    { 
     return; 
    } 

    //Here comes your custom redirect logic: 
    if (!db.Subscriptions.Any(s => s.AdminSerial.Equals(db.Serials.Any()))) 
    { 
     filterContext.Result = your redirect url goes here; 
    }     
    } 
関連する問題