httpresponseredirect example python django permissions

python - example - httpresponseredirect django



¿Será Django una buena opción para una aplicación web basada en permisos? (6)

Acabo de encontrar http://bitbucket.org/jezdez/django-authority/ , parece prometedor.

He estado explorando los detalles de Django durante aproximadamente una semana y me gusta lo que veo. Sin embargo, me he encontrado con ... cierta negatividad en relación con el control detallado de los permisos para la interfaz CRUD.

Lo que estoy escribiendo es una aplicación web de administración de clientes Intranet. La organización tiene aproximadamente 6 niveles, y debo restringir el acceso a los grupos de clientes en función de los niveles. En continua expansión. Tengo una idea bastante buena de cómo voy a hacer esto, pero no estoy seguro de si podré integrarlo bien en la interfaz de administración preconstruida.

He hecho un desarrollo absolutamente nulo de Django, de lo contrario, probablemente tendría una mejor idea sobre si esto funcionaría o no. Probablemente no use Django si la interfaz de administración generada va a ser inútil para este proyecto, pero como he dicho, existe una gran dependencia de los permisos personalizados de grano fino.

¿Django me permitirá construir permisos / reglas personalizadas e integrarlo sin problemas en la interfaz de administración CRUD?

Actualización uno: quiero utilizar la aplicación de administración para minimizar la repetición de la generación de interfaces CRUD, así que sí, lo considero imprescindible.

Actualización dos:

Quiero describir los permisos requeridos para este proyecto.

Un cliente puede pertenecer a una o varias ''tiendas''. Los empleados a tiempo completo solo deberían poder editar clientes en su tienda (incluso si pertenecen a otra tienda). Sin embargo, no deberían poder ver / editar clientes en otra tienda. Los casuales solo deberían poder ver a los clientes según la tienda en la que se encuentren (o si el informal está conectado como el usuario de la tienda, es más probable).

La gerencia por encima de ellos necesita poder ver a todos los empleados de las tiendas que administran, nada más.

La alta dirección debería poder editar TODOS los empleados y otorgar permisos debajo de ellos.

Después de leer la documentación de django, dice que no puede (de forma automática) establecer permisos para un subconjunto de un grupo. Solo todo el grupo ¿Es tan fácil simular tus propios permisos para este propósito?


Desde django 1.2 hay soporte para permisos a nivel de fila, lo que django-guardian hace que sea muy intuitivo de manejar.


El sistema de permisos de Django es totalmente reglamentario. Cada modelo tiene un conjunto predeterminado de permisos. Puede agregar nuevos permisos a sus modelos, también.

Cada usuario tiene un conjunto de permisos y membresías de grupos. Los usuarios individuales pueden tener permisos individuales. Y heredan los permisos de su membresía grupal.

Sus funciones de vista (y plantillas) pueden verificar fácilmente la presencia de ausencia de esos permisos en cualquier nivel de granularidad que necesite usar.

Y si esto no es suficiente para usted, el complemento Profile le ofrece aún más opciones para definir un "Usuario" y sus capacidades, permisos, roles, responsabilidades, etc.

Y si esto no es suficiente para usted, puede definir sus propios esquemas de autenticación.

Lo importante no es tratar de definir grupos que sean subconjuntos reales de usuarios, títulos o roles no casualmente definidos. Nunca necesita "establecer permisos para un subconjunto de un grupo". Necesitas tener grupos más pequeños. Grupos definidos en torno a subconjuntos de personas.

Los permisos predeterminados de Django están relacionados con el acceso al modelo, no con el acceso a filas dentro de un modelo. Por otro lado, su problema es sobre subconjuntos de filas en varios modelos: Cliente, Tienda, Empleado, Administrador.

Necesitará un conjunto básico de FK entre estos elementos, y algunos filtros para subconjunto de las filas. Puede tener problemas para hacer esto con las páginas de administración predeterminadas. Es posible que necesite su propia versión de administrador para hacer uso de filtros especializados.

Si no puede hacerlo con el sistema de permisos de Django, debe reconsiderar sus casos de uso. Seriamente.

[La interfaz Django-REST, sin embargo, es otra bestia por completo, y requiere un poco de cuidado y alimentación.]


Si leo correctamente los requisitos actualizados, no creo que el sistema de autenticación existente de Django sea suficiente. Parece que necesitas un sistema de ACL completo.

Este tema ha aparecido varias veces. Prueba google en django + acl.

Muestreos aleatorios ...

Hubo un proyecto de Summer of Code hace un par de años, pero no estoy seguro de a dónde llegaron. Ver http://code.djangoproject.com/wiki/GenericAuthorization

Hay un boleto nuevo en djngoproject.org que podría ser interesante:

Hay algunos códigos de corte interesantes en dumpz.org:

... pero hay cero documentos.

¡Buena suerte!



Los objetos ModelAdmin tienen los has_add_permission , has_change_permission , has_delete_permission y queryset que se pueden usar para imponer permisos alrededor de lo que el usuario conectado puede ver y modificar: puede crear una subclase que los use para imponer los permisos que desee implementar y registrar todos sus modelos con la aplicación de admin usando su subclase.

Sin embargo, todo depende de cómo funcionará exactamente su sistema de permisos. ¿Cuáles son los requisitos exactos que caen de sus permisos precisos? Cuanto más se aleje de lo que la aplicación de admin fue diseñada para hacer, más trabajo llevará, pero hay muchos ganchos que puede usar para implementar sus requisitos personalizados. Aquí hay una publicación del blog de Luke Plant que da ejemplos de algunos de los ajustes que puede hacer sin tener que cavar demasiado profundo.

¿Tiene que estar absolutamente basado en la aplicación de admin ? Las vistas genéricas y ModelForms pueden ocuparse de muchos de los aspectos tediosos involucrados en la implementación de CRUD, así que tenga cuidado de no concentrarse demasiado en la personalización del admin . Es casi una tradición de Django comenzar colgando de la aplicación de admin y de lo que puede y no puede hacerlo, inicialmente pensando que nunca más tendrá que escribir ningún código;)