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)
});