ユーザーが他のユーザーからデータを読み込んだり変更したりできないようにするために、既存のシステムにモデル ベースのアクセス セキュリティを実装する必要があります。そこで、その目的のためにいくつかのインターフェースを作成し、モデル クラスにそれらを実装させました。すべてのクエリを呼び出すベース リポジトリ クラスがあるため、これらのインターフェイスを 1 か所で確認するだけで、すべてが機能します。それはありますが、その間に 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;
}