Azure / Azure/data-api-builder

[Feature] Add support for database policies with relations

Abierto
#2,676 7 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

move-to-close
Lenguaje dominante
C#
Estrellas
1.5k
Forks
372
Merge medio
3 d 22 h
PR fusionados (30 d)
9

Descripción

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)`

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la documentación enlazada sobre las políticas de la base de datos y la implementación actual de expresiones RLS simples de OData. Rastrea cómo se representan las relaciones entre entidades y los claims, y determina después cómo deben evaluarse las expresiones relacionales como any/all. Se considera completado cuando las políticas pueden filtrar una entidad a través de una tabla relacionada usando el claim solicitado del llamador, con cobertura para el ejemplo de Books y Sellers.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
csharp
Área
api, authorization, databases
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.