Utilizzo il framework Rango di Django con lo nested router extension. Uno dei miei percorsi è il seguente: companies/$company/locations/$location
dove $company
e $location
sono variabili di slug.Autorizzazioni per il REST di Django su Rotte nidificate
Desidero consentire agli utenti di POST di questo URL: companies/$company/locations/
aggiungere nuove posizioni. Voglio assicurarmi che l'utente che fa il POST abbia i permessi di correzione per la compagnia a cui sta facendo il POST. Attualmente utilizzo django-guardian
per le mie autorizzazioni a livello di oggetto. Il messaggio POST contiene solo il nome della nuova posizione in cui non contiene il nome dell'azienda in quanto ciò può essere dedotto dall'URL. Sto avendo difficoltà a far rispettare correttamente le autorizzazioni in questo caso. Avevo impostato il campo company
del nuovo oggetto Location
dal metodo pre_save
del Viewset, ma è troppo tardi perché venga applicato il controllo dell'autorizzazione.
Qual è il modo migliore per far rispettare questo?
Nel caso ci all'utente include la società nel post, posso validare l'azienda aggiungendo quanto segue al viewset:
def get_queryset(self):
parent = super(LocationViewSet, self).get_queryset()
return parent.filter(company__slug=self.kwargs['company_slug'])
Avete mai trovato una soluzione per questo? – Gabriel
@alex come hai ottenuto la slug aziendale nel metodo pre_save? Sto anche cercando la risposta alla tua domanda attuale – Neil
Puoi pubblicare url e visualizzazioni e serializzatore? –