2012-03-02 71 views
1

限制网络服务的数据契约属性我有以下的Web服务:如何基于用户角色

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

[OperationContract] 
public Project GetProject(long Id); 

现在我想添加一个SecretData属性,只能暴露于特定的用户。我想出了一些想法,但他们没有坐很好与我:

  1. 可为空SecretData属性添加到Project。如果用户无权查看,请将其设置为null。这似乎是最简单的方法,但消费者将如何分辨“不许可”值和合法值null之间的差异?
  2. 解决方案1,但也添加布尔值CanViewSecretData属性。这解决了合法的null问题,但似乎很麻烦。
  3. 提供单独的操作SecretDataType GetSecretData(long projectId)以检索秘密数据,并在用户无权调用时返回错误。这样可以保持数据契约的清洁,但是我看到我们结束了大量的单独操作,需要调用它们才能构建完整的对象。

那里有更好的方法吗?

回答

2

我不知道你在用什么框架,但从一般的Web服务角度来看,这是我的建议。在Project的XSD中,将一个可选SecretData元素添加到Project。当用户不被允许阅读SecretData时,请不要在响应中包含元素。否则,包含该元素,并在SecretDatanull时将xsi:nil属性设置为true