Asp.Net Web Api を使用しています。接続されたクライアントのアクセス権に基づいて、応答オブジェクトの特定のフィールドを除外できるようにしたいと考えています。
例:
class Foo
{
[AccessFilter("Uberlord")]
string Wibble { get; set; }
string Wobble { get; set; }
}
データWibble
を返す場合、現在のユーザー コンテキストが「Uberlord」の値を満たすことができる場合にのみ、フィールドを返す必要があります。
私が模索している 3 つの方法がありますが、実用的な解決策はありません。
- カスタム WebApi MediaTypeFormatter。
- カスタム json.net IContractResolver。
- 応答オブジェクトを操作するコントローラー用のある種の AOP ラッパー
これらに関する私の問題は次のとおりです。
- カスタムフォーマッタは、それを行うのに適切な場所ではないように感じますが、唯一のオプションかもしれません.
- カスタム json シリアライザーは現在のコンテキストにアクセスできないため、解決する必要があります。
- 最初の 2 つのオプションでは、各応答形式、json、xml、一部のカスタム形式などに特定の実装が必要になります。これは、別の応答タイプがサポートされている場合、機密データの漏洩を防ぐためにカスタム フォーマッタ/シリアライザーが必要であることを意味します。
- AOP コントローラー ラッパーには、多くのリフレクションが必要です。
追加のボーナスは、同じメカニズムを使用して受信リクエスト オブジェクトのフィールドから値を削除することです。
明らかなフックを見逃していませんか? これは別の方法で解決されましたか?