Controlli di autorizzazione a livello di campo per l'API REST: questa convalida?

1

Diciamo che abbiamo una sorta di "schema" per una risorsa di riposo, qualcosa come (pseudocodice):

 ExampleResource:
     field1 = field(validate=is_string())
     field2 = field(validate=is_int())
     field3 = field(validate=is_string(max_length(200))
     creator_id = field(validate=is_int())

A seconda delle autorizzazioni dell'utente, il suo accesso dovrebbe essere limitato. Ad esempio, potremmo avere un utente in grado di inviare nuove risorse, ma solo PATCH delle risorse che ha creato (creatore_id è uguale al suo ID univoco), potremmo avere un altro utente in grado di ottenere tutte le risorse, ma ha solo le autorizzazioni per visualizzare field1 e field2 sulle risorse, potremmo avere un utente che ha solo le autorizzazioni per PATCH field2 su tutte le risorse, ecc.

Quindi la mia domanda è - controllerebbe che le autorizzazioni degli utenti siano parte della convalida? Qualcosa del genere:

ExampleResource2:
    field = field(validate=[is_string(), check_permission(create=permission1, edit=permission2, view=permission3)])

Attualmente sto lavorando a un progetto in cui i controlli dei permessi sono implementati in questo modo, e sto cercando qualche input su questo - questa è una buona pratica? Ha senso? In quale altro modo implementeresti questo?

I miei pensieri: Da un lato, dal momento che ogni campo è comunque verificato per la validità, è come se ci si sentisse efficienti anche a verificare le autorizzazioni contemporaneamente; in caso contrario, è necessario prima analizzare tutti i campi e verificare tutte le autorizzazioni e quindi passare nuovamente tutti i campi per convalidarli. D'altra parte, questo tipo di design non mi sembra molto SOLIDO.

    
posta sunaurus 30.07.2015 - 11:19
fonte

1 risposta

1

Poiché il permesso dovrebbe essere a livello di risorsa, in genere controlli le autorizzazioni su una risorsa prima di iniziare a convalidare i dati, poiché è il punto di partenza della convalida dei dati se l'utente non ha il permesso di cambiarli.

Questo è il modo in cui funziona la maggior parte dei framework web, il controllo delle autorizzazioni avviene subito dopo il routing. Una volta concesso all'utente l'accesso per aggiornare la risorsa, si avvia la convalida dei dati inviati al server o si costruisce una determinata vista in base al livello di autorizzazione o al gruppo dell'utente.

    
risposta data 03.08.2015 - 21:40
fonte

Leggi altre domande sui tag