我必须在现有系统上实现基于模型的访问安全性,以防止用户加载/更改其他用户的数据。所以我为此目的创建了几个接口并让模型类实现它们。我有一个调用所有查询的基础存储库类,所以我只能在一个地方检查这些接口,一切都会正常工作。确实如此,但我不确定我是否同时破坏了 Future 功能。
所以基本上,问题很简单,如果我在每次 Future() 调用之后调用这个扩展方法,它会立即触发查询(打破未来的目的)吗?Where() 或强制转换为接口是否会强制 Future 立即执行?
internal static IEnumerable<TX> ApplyRestrictions<TX>(this IEnumerable<TX> results, IUnitOfWork uow)
{
if (typeof(IContextUser).IsAssignableFrom(typeof(TX)))
{
var currentUser = uow.UserRepository.FindCurrentUser();
return results.Where(x => (x as IContextUser).User == currentUser);
}
if (typeof(IContextCompany).IsAssignableFrom(typeof(TX)))
{
var currentCompany = uow.CompanyRepository.FindCurrentCompany();
return results.Where(x => (x as IContextCompany).Company == currentCompany);
}
return results;
}