ServiceStack глобальный фильтр автозапроса

Я смотрю на использование функции AutoQuery в ServiceStack, и у меня есть несколько основных запросов. Однако я хотел бы реализовать глобальный фильтр, так как у меня есть многопользовательская база данных, например,

Все запросы должны быть дополнены критериями CustomerId = Session.CustomerId

Каков был бы лучший способ сделать это?

1 ответ

Вы можете потенциально использовать собственный базовый класс 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)
});
Другие вопросы по тегам