with vincent template guardian custom python django django-permissions

python - vincent - ¿Cómo uso los grupos y permisos de Django?



login url django (1)

Supongo que la primera pregunta que debe hacer es qué permisos necesita y de qué tipo. Por qué tipo, me refiero a si quieres nivel de modelo o de objeto. Para aclarar la diferencia, di que tienes un modelo de automóvil. Si desea otorgar permisos en todos los automóviles, entonces el nivel de modelo es apropiado, pero si desea otorgar permisos por automóvil, quiere el nivel de objeto. Puede necesitar ambos, y esto no es un problema, como veremos.

Para los permisos del Modelo, Django maneja estos para usted ... principalmente. Para cada modelo, Django creará permisos con el formato ''appname.permissionname_modelname''. Si tiene una aplicación llamada ''controladores'' con el modelo de automóvil, entonces uno de los permisos sería ''drivers.delete_car''. Los permisos que crea automáticamente Django serán crear, cambiar y eliminar. Por alguna extraña razón, decidieron no incluir los permisos de lectura de CRUD. Tendrás que hacer esto tú mismo. Tenga en cuenta que Django decidió cambiar la "actualización" de CRUD por "cambiar" por algún motivo. Para agregar más permisos a un modelo, digamos permisos de lectura, usa la clase Meta:

class Car( models.Model ): # model stuff here class Meta: permissions = ( ( "read_car", "Can read Car" ), )

Tenga en cuenta que los permisos son un conjunto de tuplas, donde los elementos de la tupla son el permiso descrito anteriormente y una descripción de ese permiso. No tiene que seguir la convención permname_modelname, pero generalmente me apego a ella.

Finalmente, para verificar los permisos, puede usar has_perm:

obj.has_perm( ''drivers.read_car'' )

Donde obj es una instancia de Usuario o Grupo. Creo que es más simple escribir una función para esto:

def has_model_permissions( entity, model, perms, app ): for p in perms: if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ): return False return True

Donde la entidad es el objeto para verificar permisos en (Grupo o Usuario), el modelo es la instancia de un modelo, permanentes es una lista de permisos como cadenas para verificar (por ejemplo [''leer'', ''cambiar'']), y la aplicación es la nombre de la aplicación como una cadena. Para hacer el mismo control que has_perm, llamarías algo como esto:

result = has_model_permissions( myuser, mycar, [''read''], ''drivers'' )

Si necesita usar permisos de objeto o fila (significan lo mismo), Django no puede ayudarlo por sí solo. Lo bueno es que puede usar los permisos de modelo y objeto uno al lado del otro. Si quieres permisos de objetos, deberás escribir el tuyo propio (si usas 1.2+) o buscar un proyecto que alguien más haya escrito, uno que me gusta es django-objectpermissions from washingtontimes.

Entiendo las cosas básicas del usuario. Conozco la autenticación, el inicio de sesión, la creación de cuentas, etc. Pero ahora quiero trabajar en grupos y permisos.

¿Dónde está la documentación para grupos / permisos django? Esto no es todo: http://docs.djangoproject.com/en/dev/topics/auth/