У меня есть следующий веб-сервис:
[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
и допустимым значением null
?
- Решение 1, но также добавьте логическое
CanViewSecretData
свойство. Это решает законную проблему null
, но кажется громоздким.
- Укажите отдельную операцию
SecretDataType GetSecretData(long projectId)
для извлечения секретных данных и возврата ошибки, если у пользователя нет разрешения на ее вызов. Это сохраняет контракт данных чистым, но я вижу, что в конечном итоге мы получаем множество отдельных операций, которые необходимо вызывать для создания полного объекта.
Есть ли лучший подход?