2012-03-02 7 views
1

に基づいてWebサービスデータコントラクトのプロパティを制限するために、私は、次のWebサービスを持っている:どのようにユーザーの役割

[DataContract] 
public class Project 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
} 

[OperationContract] 
public Project GetProject(long Id); 

今、私は特定のユーザーのみにさらされるべきSecretDataプロパティを追加します。私はいくつかのアイデアを思い付くしましたが、それらのどれも私と一緒に非常によく座っていない:

  1. ProjectにNULL可能SecretDataプロパティを追加します。ユーザーに表示する権限がない場合は、nullに設定します。これは最も簡単なアプローチのようですが、消費者は「許可なし」nullと正当なnullの値の違いをどのように伝えますか?
  2. ソリューション1だけでなく、ブール値CanViewSecretDataプロパティも追加します。これは正当なnull問題に対処しますが、扱いにくいようです。
  3. 秘密データを取得するために別の操作SecretDataType GetSecretData(long projectId)を提供し、ユーザーにそれを呼び出す権限がない場合はエラーを返します。これはデータコントラクトをきれいに保ちますが、完全なオブジェクトを構築するために呼び出す必要のある別々の操作がたくさんあることがわかります。

もっと良いアプローチがありますか?

答えて

2

私はどのフレームワークを使用しているのか分かりませんが、ここでは一般的なWebサービスの観点から考えています。 ProjectのXSDで、オプションのSecretData要素をProjectに追加します。ユーザーがSecretDataの読み取りを許可されていない場合は、レスポンスに要素を含めないでください。それ以外の場合は、要素を含めます。SecretDatanullの場合、xsi:nil属性をtrueに設定します。

関連する問題