2016-09-20 11 views
2

dbcontextにアクセスして、カスタムポリシーベース認証でテーブルデータとセッションを取得することは可能でしょうか?誰でもそれを達成する方法を助けることができますか?カスタムポリシーベースの認証でdbcontext&sessionにアクセスする方法

 services.AddAuthorization(options => 
     { 
      options.AddPolicy("CheckAuthorize", 
           policy => policy.Requirements.Add(new CheckAuthorize())); 
     }); 

     services.AddSingleton<IAuthorizationHandler, CheckAuthorize>(); 


public class CheckAuthorize : AuthorizationHandler<CheckAuthorize>, IAuthorizationRequirement 
{ 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CheckAuthorize requirement) 
    { 

     if() //check session to verify user is logged in or not 
     { 
      //redirect to login page 
     } 
     else 
     { 
      if()//access dbcontext get data from database table to validate user access 
      { 
       //redirect to access denied page 
      } 
     } 
     throw new NotImplementedException(); 

    } 
} 

答えて

2

ポリシーは、あなたがこれを行うと、あなたの要件別々に作るために持っていることを何か

public class CheckAuthorizeHandler : AuthorizationHandler<CheckAuthorizeRequirement> 
{ 
    MyContext _context; 

    public CheckAuthorizeHandler(MyContext context) 
    { 
     _context = context; 
    } 

    protected override Task HandleRequirementAsync(
     AuthorizationHandlerContext context, 
     MyRequirement requirement) 
    { 
     // Do something with _context 
     // Check if the requirement is fulfilled. 
     return Task.CompletedTask; 
    } 
} 

のような注意を行うことができ、あなたのデシベルコンテキストがDIであると仮定すると、そう DI

を使用することができますあなたはすることができないので、あなたはする必要があるでしょう

public CheckAuthorizeRequirement : IAuthorizationRequirement 
{ 
} 

最後に、DIシステムにハンドラを登録する必要があります

services.AddTransient<IAuthorizationHandler, CheckAuthorizeHandler>(); 
+0

お返事ありがとうございます。私はそれをベースにURコードを試します。セッションの値を取得してリダイレクトするのはどうですか? – WolfPack

+0

これはすべて文書化されています。セッションはDIサービス、ISessionでもあります。私はリダイレクトの意味を理解していません。 – blowdart

+0

oh dbcontextとSessionの両方がDIサービスです。リダイレクトは、ユーザーのアクセス検証が偽であれば、ユーザーをログインページにし、アクセス拒否ページを表示することを意味します。 – WolfPack

関連する問題