我在 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") 问题!!- 我得到了所有的物品。
谢谢