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

가장이를 처리하는 방법을 정말 확실하지. 자동 질의 서비스에 [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)); 
} 

대안은 동적으로 자동 질의 요청 DTO에 속성을 추가하는 것입니다

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

는 IAutoQueryDb 서비스에 주입 할 생각이다, 그러나 이들은 예를 들어, appHost.Init() 전이나 AppHost 생성자에 하나,라고 Configure() 전에 등록 할 필요가? 나는 널 예외를 얻고있다 .... 당신이 제공 한 링크에서 기본적으로 동일한 예제를 사용한다. –

+0

@ChrisKlepeis 예'IAutoQueryDb'는 AutoQueryFeature를 등록 할 때 IOC에 등록됩니다 (예 :'Plugins.Add (new AutoQueryFeature()); – mythz