Azure / Azure/data-api-builder

[Feature] Add support for database policies with relations

Aperta
#2,676 7 commenti 2 reazioni 0 assegnatari Vedi su GitHub
move-to-close
Lingua principale
C#
Stelle
1.5k
Fork
370
Merge medio
3g 22h
PR unite (30g)
9

Descrizione

DAB currently offers support for simple Odata expressions when defining “RLS” policies for an entity as explained in the [public doc](https://learn.microsoft.com/en-us/azure/data-api-builder/reference-configuration?tabs=http#database).

```
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
},
"permissions": [
{
"role": "selfReader",
"actions": [
{
"action": "read",
"policy": {
"database": "@claims.userId eq @item.Id"
}
}
]
}
]
}
}
}
```

This instructs DAB to return rows from User table only for which Id value matches with the userId claim. The expression supports filtering on columns on the same entity only.

In many cases, customers keep user details or mapping details on a separate table altogether. Consider the following database schema.

Books
-Id
-Title
-SellerId (relationship with Sellers on its id)

Sellers
-id
-email


Let’s say we want to return Book rows only if its seller email is the same as caller’s email.
To support his behavior, we would need support for enhanced Odata expressions such as
`@item.sellerId/all(s: s/email eq @claims.upn)`
OR 
`@item.sellerId/any(s: s/email eq @claims.upn)`

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia dalla documentazione collegata sulle policy del database e dall’implementazione corrente delle semplici espressioni RLS di OData. Traccia come vengono rappresentate le relazioni tra entità e i claim, quindi determina come devono essere valutate le espressioni relazionali come any/all. Il lavoro è completato quando le policy possono filtrare un’entità tramite una tabella correlata utilizzando il claim richiesto del chiamante, con una copertura per l’esempio Books e Sellers.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
api, authorization, databases
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.