3

私の OData ベースの Web API では、ユーザーがモデルにアクセスするための適切な権限を持っているかどうかを確認する追加の認証レイヤーがあります。現在、クエリで $expand が使用されている場合、モデルのバインドはこれらの承認チェックを完全にバイパスします。

私が望むのは、(たとえば) を呼び出すときに/odata/Countries(2)?$expand=Locations,People、現在のユーザーには を取得する権利がないことを承認レイヤーが報告した場合Peopleでも、応答は返されますが、 にLocationsバインドされている場合のみCountriesです。したがって、アクセスできないPeopleモデルは と一緒に返されるべきではありませんCountries

関数から派生さSelectExpandQueryValidatorせて変更することができましたValidate。ただし、これにより、拡張クエリを無効と宣言することしかできず、変更することはできません。さらに言えば、これは認証の問題であり、検証には属しません。また、認証レイヤーがアクセスできるかどうかCountriesを判断するためにエンティティが必要です。LocationsPeople

その後、System.Web.Http.OData.Query 名前空間を調べたところ、何らかの方法でRawExpandプロパティを変更する必要があることがわかりましたSelectExpandQueryOption。しかし、これは読み取り専用であるため (また、ハッキングのようにも見えます)、代替手段を探し始めました。ただ、メソッドODataQueryOptionsを使用するためにいつクラスが呼び出されたかを見つけることができませんApplyTo(私の場合、すべての展開モデルをバインドします)。要するに、呼び出されたメソッドの内部にいるときに、$expand がモデルをバインドする方法を変更するにはどうすればよいでしょうか?

これは非常に具体的な $expand の質問であり、ベータ機能についての質問であるため、私はおそらく、ここで長居している ASP.NET Web API 開発者を見ているのでしょう。ここに明らかな機能が欠けているのでしょうか、それとも要求が高すぎますか? 前もって感謝します!

4

2 に答える 2

0

WebApi V4 を使用しようとしましたか? フィルターの変更について質問があります。SelectExpand でもこれを行うことができると思います。 OData V4 はサーバー側で $filter を変更します

于 2015-12-11T02:01:13.520 に答える