Azure / Azure/data-api-builder

[Bug]: REST unexpected authorization error when excluding primary key and using orderby

Aperta
#2,903 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug triage
Lingua principale
C#
Stelle
1.5k
Fork
370
Merge medio
3g 17h
PR unite (30g)
8

Descrizione

### What happened?

If a primary key is excluded through the `actions.fields.exclude` property an authorization error occurs when the `orderby` clause is used in the request, even if the field used in the `orderby` is authorized.

Configuration file: In this case `id` is a primary key
```
"Book": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "create"
},
{
"action": "read",
"fields": {
"include": [ "*" ],
"exclude": [ "id" ]
},
"policy": {
"database": "id gt 2"
}
}
}
```

REST request used: ` https://localhost:5001/api/Book?$orderby=title asc`

### Version

1.6.68

### What database are you using?

Azure SQL

### What hosting model are you using?

_No response_

### Which API approach are you accessing DAB through?

REST

### Relevant log output

```Text
fail: Azure.DataApiBuilder.Service.Controllers.RestController[0]
71916690-677b-4638-a837-b2e7eaa8fee6 Error handling REST request.
Azure.DataApiBuilder.Service.Exceptions.DataApiBuilderException: Authorization Failure: Access Not Allowed.
at Azure.DataApiBuilder.Core.Services.RestService.AuthorizationCheckForRequirementAsync(Object resource, IAuthorizationRequirement requirement) in C:\Users\rcernaserna\DAB\data-api-builder\src\Core\Services\RestService.cs:line 508
at Azure.DataApiBuilder.Core.Services.RestService.ExecuteAsync(String entityName, EntityActionOperation operationType, String primaryKeyRoute) in C:\Users\rcernaserna\DAB\data-api-builder\src\Core\Services\RestService.cs:line 189
at Azure.DataApiBuilder.Service.Controllers.RestController.HandleOperation(String route, EntityActionOperation operationType) in C:\Users\rcernaserna\DAB\data-api-builder\src\Service\Controllers\RestController.cs:line 239
```

### Code of Conduct

- [x] I agree to follow this project's Code of Conduct

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia in src/Core/Services/RestService.cs, intorno al controllo dell'autorizzazione alla riga 508, quindi segui il flusso della richiesta attraverso src/Service/Controllers/RestController.cs alla riga 239. Riproduci la richiesta REST con actions.fields.exclude impostato su id e orderby=title asc; il lavoro è completato quando la richiesta orderby autorizzata ha esito positivo senza un errore di autorizzazione, mentre la chiave primaria rimane esclusa.

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

Valutazione

Stack tecnologico
azure, csharp, sql
Ambito
api, authorization, databases
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.