2016-06-30 10 views
1

いくつかの自動クエリーで認証を実施したいと思います。ServiceStack AutoQueryと[Authenticate]属性

[Authenticate] 
public class BusinessEntitiesService : QueryDb<DataModel.dbo.BusinessEntity> 
{ 
} 

ここに私の問題があります。上記のクラスは私のServiceModelプロジェクトにあります。[Authenticate]属性を追加するために、私はServiceStackを参照するための以前のガイダンスに従って、問題を引き起こす可能性があるServiceStack.dllへの参照を追加する必要があります。 ServiceModelのインタフェース)。上記のクラスをServiceInterfacesに追加することはできません。その理由は、クライアントを使用するあらゆる場所で参照する必要があるからです。

私もGlobalRequestFilterを使用してみました...それはAdminFeatureプラグインでへまをするために表示されます。

private bool IsAProtectedPath(string path) 
    { 
     return !path.StartsWith("/auth") && !path.StartsWith("/autoquery"); 
    } 

     GlobalRequestFilters.Add((httpReq, httpResp, requestDto) => 
     { 
      if(IsAProtectedPath(httpReq.PathInfo)) 
       new AuthenticateAttribute().Execute(httpReq, httpResp, requestDto); 
     }); 

enter image description here

最高これを処理する方法が本当にわかりません。 AUTOQUERYサービスへ[Authenticate]属性を適用するために

答えて

2

あなたは、custom AutoQuery implementationを作成し、フィルターはその上で属性を適用する必要があります。例:

[Authenticate] 
public class MyProtectedAutoQueryServices : Service 
{ 
    public IAutoQueryDb AutoQuery { get; set; } 

    public object Any(QueryBusinessEntity query) => 
     AutoQuery.Execute(query, AutoQuery.CreateQuery(query, Request)); 

    public object Any(QueryBusinessEntity2 query) => 
     AutoQuery.Execute(query, AutoQuery.CreateQuery(query, Request)); 
} 

代替は、動的にAUTOQUERYリクエストDTOに属性を追加することですしかし、これらはConfigure()は、例えば、appHost.Init()前、またはあなたのAPPHOSTコンストラクタのいずれかで、呼び出される前に登録する必要があります:

public class AppHost : AppHostBase 
{ 
    public AppHost() 
    { 
     typeof(QueryBusinessEntity) 
      .AddAttributes(new AuthenticateAttribute()); 
    } 
} 
+0

IAutoQueryDbは、サービス内に注入されることになっていますか?私はそれにnull例外が発生しています....あなたが提供したリンクから基本的に同じ例を使用しています。 –

+0

@ChrisKlepeisはいAutoQueryFeatureを登録すると 'IAutoQueryDb'がIOCに登録されます。たとえば、' Plugins.Add(new AutoQueryFeature()); ' – mythz

関連する問題