2011-12-05 9 views
8

Sto cercando un modo per personalizzare l'amministrazione Django per supportare le autorizzazioni in base al gruppo di utenti.admin django - permessi di gruppo per modificare o visualizzare i modelli

Ad esempio, ho appena creato il gruppo Developers, ora ho anche creato il modello Tickets, con AdminModel per specificare come elencare i dati.

Mi piacerebbe avere questo modello visibile solo dagli sviluppatori, e nascosto tra loro non in questo gruppo (ad esempio, filtrare la vista in base ai gruppi). Ho letto molte documentazioni, ma non sono riuscito a trovare e capire cosa fare per farlo funzionare.

Per motivi di sicurezza, devo anche controllare i gruppi di utenti in fase di runtime quando si aggiunge l'eliminazione di oggetti per un modello specifico (quello che ho nascosto a persone esterne al gruppo degli sviluppatori), altrimenti sarebbe necessario conoscere solo il URL per utilizzare il modello: s

Sembra un compito semplice, ma forse mi manca qualcosa ... qualsiasi middleware di terze parti o solo un modo per farlo? Sono anche pronto a modificare le viste di amministrazione, se necessario, ma ho bisogno di sapere cosa fare.

Grazie :-)

risposta

12

ModelAdmin ha tre metodi che si occupano di permesso dell'utente: has_add_permission, has_change_permission e has_delete_permission. Tutti e tre devono restituire booleano (True/False).

Così si potrebbe fare qualcosa di simile:

class TicketAdmin(admin.ModelAdmin): 
    ... 
    def has_add_permission(self, request): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_change_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_delete_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

Quando False viene restituito da uno di questi, è risultato in un 403 Forbidden.

+0

Cool! Non sapevo che c'era un semplice hook amministratore per la gestione delle autorizzazioni personalizzate! –

+0

Wow! Sembra così facile da eseguire :-) Le domande simili non hanno trovato una soluzione così facile da capire. Grazie mille !! –

+0

incredibile che è puntato esattamente su quello che sto lavorando –

Problemi correlati