我想在某些自动查询中强制执行身份验证。
[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);
});
不确定如何最好地处理这个问题。
答案 0 :(得分:2)
为了将[Authenticate]
属性应用于AutoQuery Services,您需要创建一个custom AutoQuery implementation并在其上应用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));
}
另一种方法是动态地向AutoQuery Request DTO添加属性,但这些属性需要在调用Configure()
之前注册,在appHost.Init()
之前或在AppHost构造函数中,例如:
public class AppHost : AppHostBase
{
public AppHost()
{
typeof(QueryBusinessEntity)
.AddAttributes(new AuthenticateAttribute());
}
}