4

我有一个多租户数据库,其中我的数据库中的每个表都有一个“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 列 - 有没有这样做的机制?

4

0 回答 0