使用RESTier过滤多租户数据

时间:2015-10-05 20:15:30

标签: odata restier

我有一个多租户数据库,我的数据库中的每个表都有一个“tenant_id”列。我想使用RESTier在此数据库上公开OData服务,其中对我的服务的每个请求都将包含一个JWT,其中包含一个声明,指示正在访问哪个租户的数据。如何过滤返回到传入租户的记录?

通过阅读http://odata.github.io/RESTier上的文档,看起来“实体集过滤器”功能旨在解决这种确切的场景场景。因此,假设我可以从传入的JWT中提取tenant_id以建立当前的声明主体,我应该能够做到这样的事情:

private IQueryable<customer> OnFilterCustomers(IQueryable<customer> customers)
{
    var principal = ClaimsPrincipal.Current;
    var tenantId = principal.Claims.FirstOrDefault(c => c.Type == "tenantid").Value;

    return customers.Where(c => c.tenant_id == tenantId);
}

这是最适合执行此项工作的地方吗?是否有基于授权请求标头执行行级过滤器的示例?

我还想隐藏我的EDM中的tenant_id列 - 是否有这样做的机制?

0 个答案:

没有答案