如何根据用户角色限制Web服务数据协定属性

时间:2012-03-02 00:43:32

标签: web-services soa user-roles

我有以下网络服务:

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

[OperationContract]
public Project GetProject(long Id);

现在我想添加一个只应向某些用户公开的SecretData属性。我想出了几个想法,但没有一个能与我相提并论:

  1. 将{nulllable SecretData属性添加到Project。如果用户没有查看权限,请将其设置为null。这似乎是最简单的方法,但消费者如何判断“无权限”null和合法null值之间的区别?
  2. 解决方案1,但也添加了布尔CanViewSecretData属性。这解决了合法的null问题,但似乎很麻烦。
  3. 提供单独的操作SecretDataType GetSecretData(long projectId)以检索机密数据,如果用户无权调用,则返回错误。这样可以保持数据协定的清晰,但是我发现最终需要调用许多单独的操作才能构建完整的对象。
  4. 那里有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

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