2011-12-05 32 views
8

Estoy buscando una forma de personalizar la administración de Django para admitir permisos basados ​​en el grupo de usuarios.django admin - permisos de grupo para editar o ver modelos

Por ejemplo, acabo de crear el grupo de Desarrolladores, ahora también he creado el modelo de Tickets, con AdminModel para especificar cómo enumerar los datos.

Me gustaría que este modelo fuera visible solo por los desarrolladores, y oculto entre sí no en este grupo (por ejemplo, filtrar la vista en función de los grupos). He leído muchas documentaciones, pero no he podido encontrar y entender qué hacer para que funcione.

Por razones de seguridad, también debería verificar los grupos de usuarios en tiempo de ejecución cuando agregue-elimine objetos para un modelo específico (el que he ocultado a personas ajenas al grupo Desarrolladores); de lo contrario, solo necesitaría conocer el URL para usar el modelo: s

Parece una tarea simple, pero tal vez me falta algo ... ¿algún middleware de terceros, o solo una forma de hacerlo? También estoy listo para editar las vistas de administración si es necesario, pero necesito saber qué hacer.

Gracias :-)

Respuesta

12

ModelAdmin tiene tres métodos que tratan con el permiso del usuario: has_add_permission, has_change_permission y has_delete_permission. Los tres deben devolver boolean (True/False).

Por lo que podría hacer algo como:

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() 

Cuando False se devuelve desde uno de estos, es resultado en un 403 Prohibido.

+0

¡Genial! ¡No sabía que había un sencillo administrador para el manejo de permisos personalizados! –

+0

¡Guau! Esto parece tan fácil de llevar a cabo :-) Las preguntas similares no obtuvieron una solución tan fácil de entender. ¡Muchas gracias! –

+0

increíble que apunta exactamente a lo que estoy trabajando –

Cuestiones relacionadas