Вы должны реализовать 2 разных метода.Один для HR при запросе данных, а другой для простого пользователя.Тогда вам никогда не следует возвращать весь объект (json), вместо этого создайте несколько DTO (Data Transfer Object), которые содержат желаемые данные.Итак, давайте создадим пример:
public class DTOGetEmployeeByEmployee {
public int EmployeeID { get; set; }
public string JobTitle { get; set; }
public string Description { get; set; }
public int BossID { get; set; }
}
public class DTOGetEmployeeByHR {
public int EmployeeID { get; set; }
public string JobTitle { get; set; }
public string Description { get; set; }
public int Salary { get; set; }
public int BossID { get; set; }
}
Как только пользователь запросит этого сотрудника, получите его из базы данных, а затем преобразуйте в желаемый DTO.Наилучший способ, который я видел до сих пор, - это использовать AutoMapper:
Mapper.Map<DTOxxxx>(yourObject);
. Вы также можете использовать атрибут [Authorize], чтобы проверить, является ли пользователь персоналом или сотрудником.Я делал это несколько раз в сочетании с JWT-токеном.
public class EmployeeController
{
[Authorize("HR")]
[HttpGet, Route("GetForHR")]
public IActionResult Get(int employeeID)
{
// Note: this is just a sample out of my head, so there will be adjustments needed in order to run that
// Check if the HR is allowed to access the Employees data
// Get the Employee by its ID
var emp = ...;
// Convert it to the DTO
var dto = Mapper.Map<DTOGetEmployee>(emp);
// return the dto
return Ok(dto);
}
}
Могу поспорить, что существует множество лучших решений, но для меня это очень просто, бесполезно переопределять в других приложениях и нетощутимая потеря производительности