2012-03-08 11 views
7

attualmente sto cercando di implementare il controllo degli accessi in Django. Ho letto sul permesso incorporato, ma non si cura per base dell'oggetto. Ad esempio, desidero autorizzazioni come "Solo il creatore può eliminare i propri articoli". Quindi ho letto di django-guardian. Poi di nuovo, dopo averci pensato, potrebbe essere difficile da gestire e controllare se i vincoli cambiano mai.django - confronto tra le autorizzazioni di django e l'uso delle regole di django

Guardo la prossima app di gestione dei permessi chiamata django-rules. Questo sembra adattarsi a ciò che richiedo. Tuttavia, credo che le regole di django richiedano l'istanza di un modello (quindi il livello dell'oggetto) se io richiedo una vista semplice come "area membro", non esegue questa funzione.

Questo mi ha portato a pensare di utilizzare sia il permesso di contrib per questi ultimi scenari che le regole di Django per il primo. La mia domanda qui è: quanto sarà facile gestire entrambi i framework dei permessi? Ad esempio, ho diversi gruppi di utenti. Sono preoccupato per gli scenari sovrapposti in cui l'amministratore ha aggiunto una particolare autorizzazione nel sistema di amministrazione (per consentire l'accesso a una vista), pensando che dovrebbe essere sufficiente ma risulta vincolato da vincoli stabiliti dalle regole.

Credo che questo sia un caso comune e cerco umilmente i vostri consigli e raccomandazioni in base alle vostre esperienze.

+0

Le regole di Django non richiedono un'istanza di modello. Le istanze del modello sono facoltative. –

risposta

1

Se si esegue questa operazione tramite il sito di amministrazione Django, è possibile eseguire l'override di metodi come has_delete_permission(). Questi ottengono la richiesta e l'oggetto come argomenti, quindi puoi usarlo per impostare regole come "L'utente X può cancellare solo i propri oggetti".

+0

non interamente attraverso il sito admin, ma grazie comunque. non aver notato questi metodi .. – goh

+0

Se vuoi farlo tramite il tuo codice, puoi aggiungere metodi come user_can_delete (self, user) ai tuoi modelli e usarli nel tuo codice personale e in has_delete_permission() metodi di amministrazione . – che

Problemi correlati