1

Я бы хотел включить проверку подлинности в некоторые автоматические запросы.Атрибут ServiceStack AutoQuery и [Аутентификация]

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

Вот моя проблема. Вышеупомянутый класс находится в моем проекте ServiceModel ..., чтобы добавить атрибут [Authenticate], мне нужно добавить ссылку на ServiceStack.dll, которая, как я думаю, может вызвать проблемы в будущем (согласно предыдущему руководству, ссылаться только на ServiceStack. Интерфейсы в 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

Не совсем уверен, как лучше справиться с этим.

ответ

2

Чтобы применить атрибут [Authenticate] к AutoQuery Services вы должны создать 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 Request DTO , но они должны быть зарегистрированы до Configure() называется, либо до appHost.Init() или в конструкторе AppHost, например:

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

должен ли IAutoQueryDb, который будет введен в эксплуатацию? Я получаю нулевое исключение ... используя в основном тот же пример из указанной вами ссылки. –

+0

@ChrisKlepeis Yeah 'IAutoQueryDb' зарегистрирован в IOC при регистрации AutoQueryFeature, например' Plugins.Add (новый AutoQueryFeature()); ' – mythz

Смежные вопросы