如何限制对ASP.NET Web API OData中某些属性或类的访问?

时间:2014-07-02 13:47:43

标签: asp.net-web-api-odata

我上课了:

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,并且当前用户不是那个Person。 如何在ASP.NET WebAPI OData中更好地实现它?我有CurrentUserId与person.Id和我有CurrentUserIsAdmin标志进行比较。 问题是我无法通过modelBuilder向Odata模型添加条件,因为不支持这种行为 - 我只能为每个人完全删除实体或属性,但我需要向管理员和他们自己显示它。

1 个答案:

答案 0 :(得分:1)

我认为 动态模型 是您需要的。

检查以下示例代码: https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/DynamicEdmModelCreation/ReadMe.txt