Мне нужно создать глобальный фильтр для моего db-контекста. Фильтр должен показывать только те объекты с тем же companyId, что и текущий пользователь.
Прямо сейчас, я прохожу мимо компании. Так вот:
public MyDB(int companyId) : base("name=DefaultConnection")
{
this.Filter<BaseModel>(q => q.Where(x => (x.CompanyId == companyId || x.IsGlobal==true) && x.IsDeleted == false));
}
Но, это не работает с ленивой загрузкой (виртуальные свойства). Итак, мне нужно реализовать глобальный фильтр, и я не знаю, с чего начать и как передать в него переменную companyId.
Вот мой ApplicationUser
public class ApplicationUser : IdentityUser
{
public int CompanyId { get; set; }
}
CompanyId соответствует текущему пользователю CompanyId. Каждый пользователь может принадлежать одной компании. Таким образом, companyId не будет изменяться во время входа пользователя в систему.
Спасибо за твою помощь
Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Plus
Таким образом, companyId не будет изменяться во время входа пользователя в систему.
Глобальный фильтр нельзя использовать для предиката, который не является глобальным для всех запросов.
Если вы используете глобальный фильтр, все запросы будут скомпилированы с использованием примера компании A. Однако, если кто-то из компании B войдет в ваше приложение, все отфильтрованные запросы будут по-прежнему использовать скомпилированный запрос от компании A.
К сожалению, для вашего сценария наш EF + Query Filter не может быть использован.
Я рекомендую вам попробовать вместо этого EntityFramework.DynamicFilters , возможно, они справятся с этим сценарием и нашей библиотекой.