ServiceStack AutoQuery и атрибут [Authenticate]
Я хотел бы включить проверку подлинности для некоторых автозапросов.
[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);
});
Не совсем уверен, как лучше всего справиться с этим.
1 ответ
Для того, чтобы применить [Authenticate]
Присвойте атрибуты AutoQuery Services вам необходимо создать собственную реализацию AutoQuery и применить к ней атрибуты Filter, например:
[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 AutoQuery Request, но их необходимо зарегистрировать до Configure()
называется, либо раньше appHost.Init()
или в вашем конструкторе AppHost, например:
public class AppHost : AppHostBase
{
public AppHost()
{
typeof(QueryBusinessEntity)
.AddAttributes(new AuthenticateAttribute());
}
}