[pyar] Grupos y Permisos en Django

Luis Masuelli luismasuelli en hotmail.com
Lun Mar 14 14:27:26 ART 2016


Añado encima: Los grupos son configurables en el administrador, mientras que los permisos no (estos son creados en base de datos por parte del codigo). Django ya viene con el decorador de permission_required porque, instintivamente, la intencion de esos checkeos es preguntar "si puedo hacer algo". En pocos casos vas a usar un checkeo sobre el grupo, y realmente es RARO que lo hagas (para un proyecto el checkeo lo hice pero con fines de presentación nomás).
Lo que podrías hacer, si realmente te interesa hacer un checkeo de grupos, es crear permisos particulares (y luego grupos particulares que tengan esos permisos de manera exclusiva) y preguntar por ESOS permisos. Volviendo a mi caso de ejemplo, en las pantallas propias de mi grupo de GESTOR, tengo un permiso llamado view_management_dashboard, que actualmente solo el GESTOR y un grupo mas abarcativo lo tienen, y caracteriza a la funcionalidad de ver el dashboard de gestión.
No te olvides que los grupos:
1. Pueden cambiarse por administrador, asi que lo que tengas pensado hacer con ellos REDUCILO AL MINIMO respecto de la interaccion con el codigo.2. Uno para querer hacer algo, debe preguntarse si puede hacer algo, en lugar del grupo al que pertenece. Suena menos racista, y Django ya viene con la magia incorporada. Es decir: trata de dividir la funcionalidad en QUE PUEDO HACER (en lugar de QUE SOY) y seguir desde ahi.3. En algun punto vas a encontrarte con que existen diferentes roles (como quien habla de hacerse los casos de uso) o semanticas relacionadas entre diferentes permisos, pero los grupos pueden configurarse para agrupar de manera (semi...)dinamica esas capacidades. No te olvides que los permisos son la unidad primitiva del ACL de Django, y se relacionan a las capacidades de tu sistema, y ambas cosas se crean solamente desde codigo (involucran instanciacion de modelo y lo que quieras, pero no hay interfaz para crear permisos porque ademas mucho sentido no tendria).

From: fisadev en gmail.com
Date: Mon, 14 Mar 2016 16:49:34 +0000
To: pyar en python.org.ar
Subject: Re: [pyar] Grupos y Permisos en Django

Ahora, es bueno aclarar que no está muy bien chequear por pertenencia a grupos. Lo correcto sería que crees un permiso, y chequees por ese permiso.
No es una cuestión de django, sino de manejo de permisos en general en sistemas. Siempre conviene chequear por "puede hacer tal cosa?" antes que chequear por "es tal rol?".

Si chequeás por ejemplo que sea del grupo X, y mañana ese grupo no puede hacer más la acción, pero otro grupo sí, tenés que buscar tooodos los lugares donde tu código preguntaba por si era de tal grupo, y cambiarlo por preguntar si es del otro grupo.
Si en cambio chequeás por permisos, y mañana cambia el grupo que tiene permiso para hacer eso, simplemente cambiás los permisos asignados a los grupos en la db, sin tener que recorrer y cambiar nada de tu código.

En resumen: por lo general conviene asignar permisos y chequear por si tiene o no permisos, antes que chequear por si es de tal o cual grupo. De la segunda forma estás "hardcodeando" tu lógica del permiso en el código.

On Mon, Mar 14, 2016 at 1:43 PM fisa <fisadev en gmail.com> wrote:
Podés armarte tu propio decorador, que funcione similar al permission_required, solo que chequeando el grupo. Algo como esto (basado en el código del permission_required):
https://gist.github.com/fisadev/67a9a8fa7746f96d04cf

Se usaría así:

@group_required('nombre del grupo')
def mi_vista(request, ...):
    ...

Saludos

On Mon, Mar 14, 2016 at 11:59 AM Cristian Vazquez <cristianvazquez4 en gmail.com> wrote:
podés fijarte en https://docs.djangoproject.com/en/1.9/topics/auth/default/#the-permission-required-decorator <- esto permite poner permisos definidos. Yo lo que quiero es que si alguien pertenece a un grupo pueda llamar la funcion, sino no pueda.

El 14 de marzo de 2016, 11:52, Daniel<dmlistapython en gmail.com> escribió:
podés fijarte en https://docs.djangoproject.com/en/1.9/topics/auth/default/#the-permission-required-decorator

El 14 de marzo de 2016, 11:36, Cristian Vazquez <cristianvazquez4 en gmail.com> escribió:
buenas, Como va?
En Django 1.8, Se puede limitar que una funcion en una vista solo pueda ser ejectuada por gente en determinados grupos?
Muchas gracias por su atencion.
-- 
Saludos.Cristian


_______________________________________________

pyar mailing list pyar en python.org.ar

http://listas.python.org.ar/listinfo/pyar



PyAr - Python Argentina - Sitio web: http://www.python.org.ar/



La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar


-- 
Daniel Malisani


_______________________________________________

pyar mailing list pyar en python.org.ar

http://listas.python.org.ar/listinfo/pyar



PyAr - Python Argentina - Sitio web: http://www.python.org.ar/



La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar


-- 
Saludos.Cristian

_______________________________________________

pyar mailing list pyar en python.org.ar

http://listas.python.org.ar/listinfo/pyar



PyAr - Python Argentina - Sitio web: http://www.python.org.ar/



La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar-- 
--
fisa  -  Juan Pedro Fisanotti
-- 
--
fisa  -  Juan Pedro Fisanotti


_______________________________________________
pyar mailing list pyar en python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160314/be64b158/attachment-0001.html>


Más información sobre la lista de distribución pyar