0

我在 BL 和实体框架 DAL 之间创建了中间件层,用于通过应用程序中的用户权限业务逻辑过滤数据。我的图层实现了具有“无过滤 ObjectSet”实例的 IObjectSet,并且只要使用 ObjectSet,过滤器表达式就会运行。所有工作炉排,而不是“包括”方法。我找到了一个解决方案,该解决方案创建了一个将“无过滤的 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>;
        }
    }

例如:

表名“Items”有列 {Item_Id,Owner,Item_Type_Id} 该表有一个权限逻辑,用户只能看到 Owner==user 的项目。表“Item_Types”没有权限逻辑。

通过这样做:PermittedDAL。Items.ToArray() – 仅获取 current_user==Owner 的项目。Item_Types.Include("Items") 问题!!- 我得到了所有的物品。

谢谢

4

1 回答 1

0

EF 不支持过滤预先加载的记录(包括)。只能过滤主要记录。如果您需要过滤关系,您必须对每个关系使用自定义投影或单独查询。

于 2011-11-04T13:48:07.460 回答