ServiceStack AutoQuery 和 [Authenticate] 属性
ServiceStack AutoQuery and [Authenticate] Attribute
我想对某些自动查询强制执行身份验证。
[Authenticate]
public class BusinessEntitiesService : QueryDb<DataModel.dbo.BusinessEntity>
{
}
这是我的问题。上面的 class 在我的 ServiceModel 项目中...为了添加 [Authenticate] 属性,我需要添加对 ServiceStack.dll 的引用,我认为这可能会导致问题(根据之前的仅在 ServiceModel 中引用 ServiceStack.Interfaces 的指导)。我不能将上面的 class 添加到 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);
});
不太确定如何最好地处理这个问题。
为了将 [Authenticate]
属性应用于自动查询服务,您需要创建一个 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());
}
}
我想对某些自动查询强制执行身份验证。
[Authenticate]
public class BusinessEntitiesService : QueryDb<DataModel.dbo.BusinessEntity>
{
}
这是我的问题。上面的 class 在我的 ServiceModel 项目中...为了添加 [Authenticate] 属性,我需要添加对 ServiceStack.dll 的引用,我认为这可能会导致问题(根据之前的仅在 ServiceModel 中引用 ServiceStack.Interfaces 的指导)。我不能将上面的 class 添加到 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);
});
不太确定如何最好地处理这个问题。
为了将 [Authenticate]
属性应用于自动查询服务,您需要创建一个 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());
}
}