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