我有课:
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 标志要检查。问题是我无法通过 modelBuilder 向 Odata 模型添加条件,因为不支持这种行为 - 我只能为每个人完全删除实体或属性,但我需要将其展示给管理员和人们自己。