2016-12-09 15 views
3

問題ドメインEFプロキシと複雑なデータ構造

は今、私は単純に行うことができますので、EFを使用しています[OK]を

public class HierarchyObject 
{ 
    [Key] 
    public int Id { get; set; } 
    [ForeignKey("Parent")] 
    public int ParentId { get; set; } 
    public virtual HierarchyObject Parent { get; set; } 
    public virtual ICollection<HierarchyObject> Children { get; set; } 
} 

...私はこのようになりますエンティティを持っていると言います何かのようには...

var ctx = new MyContext(); 
var getAll = ctx.HierarchyObjects.AsQueryable(); 

今、私は特定のユーザーのみ、私はmighこれらのオブジェクトのサブセットに基本的なCRUD操作を行うことができ、これらのオブジェクトに権限を追加言うことができます今のようなことをする...

getAll = getAll().Where(o => o.Permissions.Any(p => p.Read && UserId == currentUserId)); 

これは、ユーザーがアクセスできる項目のみを返します。

これをクエリ可能なエンドポイントの背後に公開したいと思います.ODataと言えます。

ODataのは、私は、このようなURLを記述することができます...

〜/ API/HierarchyObject?$私はちょうど私のセキュリティを破ったことを行ってた... =子供

を展開EFプロキシは私のアクセスルールについて知りません。その結果、「アクセスできるすべてのオブジェクトとその子」となり、本当の疑問は「私がアクセスできるすべてのオブジェクトは、アクセス可能なすべての子供に拡大できます。に"。

だから私の質問は

その子供プロパティをクロールするとき、それはまた、where句...

o.Children = o.Children.Where(o => o.Permissions.Any(p => p.Read && UserId == currentUserId)); 

を適用する...して、それを適用する必要があることをEFを伝える方法がありますですそれらのうちの1つを「代理」するときはいつでも、すべての私の階層管理オブジェクトを支配しますか?

詳細

私は、この発見:すべてが順調と良い

How can I dynamically customize a POCO proxy in EF 4?

を、EF4では不可能である私は何をしようとしているssaysしかし、私は私ので、EF6を使用していますマイクロソフト/他の誰かがおそらくプロキシ作成プロセスをインターセプト/オーバーライドするために、IDbSetタイプをプロキシルールの定義を可能にするルールフックのドライバとして使用して、リレーショナルクロールのための何らかの方法で私はまだ何も見つかりませんでした!

答えて

1

だから私はこれについて間違った方向に行った。 relatinshipのクロールを防ぐためにオブジェクトを代理するのではなく、返されたエンティティをEFフィルタを使用するタイプで制限することができます。

Nugetには、ビジネスロジックコードを実行する前にEFの機能を拡張してコンテキスト感知型の「dbのカット」を提供するパッケージがたくさんあります。

関連する問題