2010-05-18 22 views
9

io non sono sicuro se questo è un bug o sto solo perdendo qualcosa (anche se ho già analizzato la documentazione relativa inline), ma:Django inlines autorizzazioni utente + leggi solo - problemi di autorizzazioni

Diciamo Ho un modello A. Il modello A è un inline del modello B. L'utente U ha pieno accesso al modello B, ma modifica solo i permessi al modello A (quindi, non aggiungere né eliminare).

Tuttavia, quando si modifica il modello B, l'utente U può ancora vedere il link "Aggiungi un altro A" in basso, sebbene U non abbia aggiunto le autorizzazioni per quel rispettivo modello.

Cosa c'è che non va? Perché quel collegamento continua a mostrare? La mia logica dice che se U non ha le autorizzazioni per aggiungere A, il link non dovrebbe più apparire.

Inoltre, idealmente, vorrei dare a U solo i diritti di visualizzazione del modello A (quindi non aggiungere, eliminare o modificare - solo visualizzazione), ma ho letto su questo (strano, se me lo chiedi) filosofia secondo a cui "Se non ti fidi di U, negagli semplicemente l'accesso all'area di amministrazione tutti insieme". Una specie di stupida dottrina.

In questo momento, sto tentando di simulare questa "autorizzazione di sola visualizzazione" lasciando U con i soli diritti di modifica e impostando tutti i campi come di sola lettura. Ma penso che questo sia un approccio stupido e possa anche causare problemi come la cosa dei permessi sopra ...

Come fa un programmatore Django medio come me a ottenere permessi di sola visualizzazione, e soprattutto come dovrei liberarmi del collegamento "Aggiungi un altro A" nella parte inferiore del modulo di modifica dell'amministratore?

Grazie in anticipo!

+0

Grande domanda qui: come si definisce questo "utente X ha permessi di accesso in sola lettura agli oggetti Y"? Il framework perms è più di una base su cui è necessario scrivere il proprio codice per controllare e convalidare le azioni dell'utente su determinati oggetti. Leggi sul decoratore [permission_required] [1] per saperne di più. L'amministratore stesso non immaginerà magicamente che l'utente X non possa creare oggetti Y e successivamente rimuoverà l'opzione "Aggiungi Y". [1]: http://docs.djopoproject.com/en/1.2/topics/auth/#django.contrib.auth.decorators.permission_required – dguaraglia

+0

sarebbe più semplice leggere la domanda se avessi alcuni modelli di esempio e classi modeladmin –

risposta

2

Se voglio una versione di sola lettura di ciò che è nell'amministratore, scrivo solo alcune normali viste Django e le tengo fuori dall'amministratore.

Non credo che il tipo di cosa di cui si sta parlando (che consente le modifiche a un oggetto ma non la sua inline) sia realmente supportato dall'amministratore. Non fraintendermi: l'amministratore è molto flessibile e utile, ma non è destinato a fare tutto per te.

L'unico modo che vedo voi di essere in grado di avere così tanto controllo l'amministratore è quello di non in linea A.

"Se non vi fidate U, solo lui nega l'accesso all'area di amministrazione tutto insieme". Una specie di stupida dottrina.

Non proprio, se si considera che l'amministratore non è destinato ad avere il livello di sicurezza richiesto per garantire il livello di controllo dell'accesso. Ci sono molti, molti posti nell'amministratore, a causa della sua natura aperta ed estensibile, dove i bug possono nascondersi (di solito in codice scritto dall'utente) che possono essere sfruttati da attori cattivi. Questo è il motivo per cui gli utenti non fidati dovrebbero sempre vedere tutti gli URL di amministratore restituire 404.

In ogni caso, quando i requisiti di controllo degli accessi sono così dettagliati, diventa improbabile che una soluzione generale (ad esempio django.contrib) si adatti.

Problemi correlati