0

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

1 に答える 1

0

気にしないで、Glimpseでテストしました。すぐにクエリがトリガーされることはありません。これは素晴らしいことです

于 2015-03-04T10:29:14.277 に答える