ServiceStack自动查询全局过滤器

本文关键字:全局 过滤器 查询 ServiceStack | 更新日期: 2023-09-27 17:53:07

我正在考虑使用ServiceStack的自动查询功能,我有一些基本的查询工作。然而,我想实现一个全局过滤器,因为我有一个多租户数据库,例如,

所有查询都应附加条件CustomerId = Session。CustomerId

最好的方法是什么?

ServiceStack自动查询全局过滤器

你可以使用自定义AutoQuery基类来为每个查询附加自定义过滤器,例如:

public abstract class MyAutoQueryServiceBase : AutoQueryServiceBase
{
    public override object Exec<From>(IQuery<From> dto)
    {
        var q = AutoQuery.CreateQuery(dto, Request);
        var session = base.SessionAs<CustomUserSession>();
        q.And("CustomerId = {0}", session.CustomerId);
        return AutoQuery.Execute(dto, q);
    }
    public override object Exec<From, Into>(IQuery<From, Into> dto)
    {
        var q = AutoQuery.CreateQuery(dto, Request);
        var session = base.SessionAs<CustomUserSession>();
        q.And("CustomerId = {0}", session.CustomerId);
        return AutoQuery.Execute(dto, q);
    }
}

然后告诉AutoQuery使用你的基类,例如:

Plugins.Add(new AutoQueryFeature { 
    AutoQueryServiceBaseType = typeof(MyAutoQueryServiceBase)
});