У меня урок:
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime BirthDate { get; set; }
}
И у меня есть контроллер WebAPI OData:
public class PeopleController : ODataController
{
[Queryable]
[HttpGet]
public IQueryable<Person> Get()
{
return (new MyEfContext()).People;
}
}
Также у меня есть в global.asax следующий код:
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Person>("Person");
config.Routes.MapODataRoute(
routeName: "MainModelQueryOdata",
routePrefix: "query/main",
model: modelBuilder.GetEdmModel(),
pathHandler: new DefaultODataPathHandler(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer),
routingConventions: conventions);
Я хочу скрыть свойство BirthDate от неадминистраторов и когда текущий пользователь не является этим человеком. Как лучше добиться этого в ASP.NET WebAPI OData? У меня есть CurrentUserId для сравнения с person.Id, и у меня есть флаг CurrentUserIsAdmin для проверки. Проблема в том, что я не могу добавить условие в модель Odata через modelBuilder, так как нет поддержки такого поведения - я могу только полностью удалить сущность или свойство для всех, но мне нужно показать это администраторам и самим людям.