Я создал промежуточный слой между BL и DAL Entity Framework для фильтрации данных по бизнес-логике разрешений пользователя в приложении. Мой уровень реализует IObjectSet, который имеет экземпляр «None Filtered ObjectSet», и выражение фильтра выполняется всякий раз, когда используется ObjectSet. Все рабочие решетки вместо метода «Включить». Я нашел решение, которое создает метод расширения, который преобразует «None Filtered ObjectSet» в ObjectQuery и использует метод ObjectQuery.Include, но это решение может вызвать обход фильтрации разрешений.
public IQueryable<TEntity> Include<TJoin>(string path)
{
if (_nonAuthorizedObjectSet is ObjectQuery<TEntity>)
{
var result = ((ObjectQuery<TEntity>)_nonAuthorizedObjectSet).Include(path);
return result as IQueryable<TEntity>;
}
}
Например:
Имя таблицы "Элементы" содержит столбцы {Item_Id, Owner, Item_Type_Id}
В этой таблице есть логика разрешений, согласно которой пользователь может видеть только те элементы, которые Владелец == пользователь.
Таблица "Item_Types" не имеет логики разрешений.
Делая:
PermittedDAL. Items.ToArray () - получить только элементы, владельцем которых является current_user ==.
Item_Types.Include ( "Items")
Проблема !! - Я получаю все предметы.
Спасибо