1

授業がある:

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 でそれを達成するにはどうすればよいですか? person.Id と比較する CurrentUserId があり、チェックする CurrentUserIsAdmin フラグがあります。問題は、そのような動作のサポートがないため、modelBuilder を介して Odata モデルに条件を追加できないことです。すべてのエンティティまたはプロパティを完全に削除することしかできませんが、管理者とユーザー自身に表示する必要があります。

4

1 に答える 1

1

Dynamic Modelが必要だと思います。

このサンプル コードを確認してください: https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/DynamicEdmModelCreation/ReadMe.txt

于 2014-08-02T15:14:43.987 に答える