如何基于用户角色
问题描述:
限制网络服务的数据契约属性我有以下的Web服务:如何基于用户角色
[DataContract]
public class Project
{
public long Id { get; set; }
public string Name { get; set; }
}
[OperationContract]
public Project GetProject(long Id);
现在我想添加一个SecretData
属性,只能暴露于特定的用户。我想出了一些想法,但他们没有坐很好与我:
- 可为空
SecretData
属性添加到Project
。如果用户无权查看,请将其设置为null
。这似乎是最简单的方法,但消费者将如何分辨“不许可”值和合法值null
之间的差异? - 解决方案1,但也添加布尔值
CanViewSecretData
属性。这解决了合法的null
问题,但似乎很麻烦。 - 提供单独的操作
SecretDataType GetSecretData(long projectId)
以检索秘密数据,并在用户无权调用时返回错误。这样可以保持数据契约的清洁,但是我看到我们结束了大量的单独操作,需要调用它们才能构建完整的对象。
那里有更好的方法吗?
答
我不知道你在用什么框架,但从一般的Web服务角度来看,这是我的建议。在Project
的XSD中,将一个可选SecretData
元素添加到Project
。当用户不被允许阅读SecretData
时,请不要在响应中包含元素。否则,包含该元素,并在SecretData
为null
时将xsi:nil
属性设置为true
。