Возвращать свойства из веб-API на основе разрешений?

#c# #json #api

Вопрос:

Допустим, у меня есть модель, которую я буду возвращать из конечной точки:

 public class Employee
{
    public string Name { get; set; }
    public string Title { get; set; }
    public decimal Salary { get; set; }
}
 

Как мне сделать так, чтобы, основываясь на некоторых критериях ключа API, я мог показывать или не показывать зарплату?

 [HttpGet]
public async Task<HttpResponseMessage> GetEmployee(int id)
{
    if (permissions["api_key"].isAdmin = true) { 
        //include Salary
        return Request.CreateResponse(HttpStatusCode.OK, await Employees.getEmployee(id));
    } else {
       //don't include salary
       return Request.CreateResponse(HttpStatusCode.OK, await Employees.getEmployee(id));
    }
}
 

Ответ №1:

а) Добавить параметр и позвонить Employees.getEmployee(id, isAdmin) и заполнить зарплату только в том случае, если(isAdmin)?

б) Добавить в класс сотрудника public bool ShouldSerializeSalary() => Salary!=0; (или другую логику), см.

Комментарии:

1. Существует более 1 флага, isAdmin-только один из них. Я бы сильно перегружал себя

2. Вы можете использовать два разных DTO и сопоставить их с вашей моделью с помощью инструмента, такого как Automapper, чтобы отобразить только те свойства, которые вы хотите отобразить, основываясь на ключе API или флагах isAdmin.