Django - grupos y permisos

Lenguajes dinamicos, hojas de estilo, frameworks, CMS...

Moderadores: frank, dxfiles

Responder
Metal
Mensajes: 32
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: Python
Contactar:

Django - grupos y permisos

Mensaje por Metal » Mié, 18 May 2011, 11:26

Estoy desarrollando en una aplicación donde tengo que crear roles entre los usuarios. Django tiene previsto esto con las tablas "auth_group", "auth_permission" y "auth_user", una relacion de muchos a muchos entre group y permission genera la tabla "auth_group_permissions". Alguien que halla trabajado con roles en este framework que me guie hacia el tutorial correcto o me explique a grandes rasgos como entrarle a este asunto.

Muchas gracias de ante mano.
Axioma de Espinosa
Si funciona, no lo toque.

Avatar de Usuario
linvix
Mensajes: 11
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: Cuba
Contactar:

Re: Django - grupos y permisos

Mensaje por linvix » Mié, 18 May 2011, 13:23

Hola!!!

Si das una idea sobre lo que quieres hacer creo que es mejor, porque si lo que quieres es un tutorial te puedo orientar que leas el libro de django en espanol que tienes buenos ejemplos


Salu2

Metal
Mensajes: 32
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: Python
Contactar:

Re: Django - grupos y permisos

Mensaje por Metal » Mié, 18 May 2011, 13:37

Lo q quiero es crear grupos y q estos grupos tengan permisos diferentes y lueg poder acceder a esto desde las vistas para filtrar q usuario puede hacer q. El tutorial en español toca estos temas????

SDS
Axioma de Espinosa
Si funciona, no lo toque.

Metal
Mensajes: 32
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: Python
Contactar:

Re: Django - grupos y permisos

Mensaje por Metal » Vie, 27 May 2011, 10:37

Efectivamente, el manual toca estos temas lastima q tuve q buscar mucho para dar con ellos. De todas maneras voy a dejar el "know how" para otros aprendieses.

1- Para estos fines se puede usar el decorador: "login_required" q restringe el uso de una función de una vista a un usuario q este logueado.

2- También se puede usar el decorador: "user_passes_test" el cual como su nombre lo indica te hace un test de validación para la función de la vista y de no pasarlo por defecto te manda para la pagina de loguin, aunque esto puede ser cambiado. Ejemplo q verifica si un usuario tiene un permiso determinado:

Código: Seleccionar todo

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.has_perm('polls.can_vote'))
def my_view(request):
    ...
Otro ejemplo q verifica si un usuario pertenece a un grupo determinado, sino lo manda para una pagina personalizada. (Es muy versátil este decorador, con imaginación se pueden lograr muchas cosas con el)

Código: Seleccionar todo

from django.contrib.auth.decorators import login_required, user_passes_test

@login_required
@user_passes_test(lambda u: u.groups.filter(name='Student').count() == 1, login_url='/myapp/denied/')
def some_view(request):

    # Do whatever this view should do
3- permission_required es otro decorador q verifica un permiso determinado.

En las plantillas tambien es necesario tener un control sobre los roles de los usuarios y para esto se usa:

Código: Seleccionar todo

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
y para los permisos:

Código: Seleccionar todo

{% if perms.foo %}
    <p>You have permission to do something in the foo app.</p>
    {% if perms.foo.can_vote %}
        <p>You can vote!</p>
    {% endif %}
    {% if perms.foo.can_drive %}
        <p>You can drive!</p>
    {% endif %}
{% else %}
    <p>You don't have permission to do anything in the foo app.</p>
{% endif %}
Esto no lo invente yo, se encuentra en: https://docs.djangoproject.com/en/dev/topics/auth/ cualquier duda amplían ahí o simplemente preguntan aquí en el foro.
Axioma de Espinosa
Si funciona, no lo toque.

Responder