entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Cómo otorgar privilegios de usuario en Django?

Saludos. Actualmente esoty otorgando "privilegios" (sí, entre comillas) a los usuarios según su categoría (is_staff). Actualmente estoy dejando mi template.html principal, así:

{% if user.is_authenticated and user.is_staff == True and user.is_superuser != True %} <!-- TUTOR -->
    <AQUI VAN LOS BOTONES, nav y ul y li QUE PUEDE VER EL TUTOR>                                                                                                                      {%  elif user.is_authenticated and user.is_staff == False %} <!-- SECRETARIA -->
    <AQUI VAN LOS BOTONES, nav y ul y li QUE PUEDE VER EL TUTOR>

Hasta ahí todo está muy bien, de hecho FUNCIONA. Pero, la verdad verdad, me siento super pirata y novato. Porque cuando inserto en el navegador una dirección url que un usuario NO DEBERIA ver, pues, simplement, la muestra.

Qué debo hacer?

1 Respuesta

1voto

white Puntos75820

restringiendo usuarios:

puedes apoyarte del decorator @login_required(login_url='/') para usuarios no logueados, o del decorator @permission_required('label.permission')

agrega este shortcut antes de la vista donde solo lo pueden ver usuarios logueados:

@login_required(login_url='login/')
def index(request):

ahora vamos a restringir a usuarios que no tengan el permiso de staff:

from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required
from django.shortcuts import redirect

@login_required(login_url='login/')
def index(request):

    if not request.user.is_staff:
        #redirect('/')
        #return render(request, 'restricted.html')
        return HttpResponse("No tienes acceso a esta parte.")

    return render(request, 'main.html')

si te fijas en la linea @login_required(login_url='login/') a los usuarios visitantes los envia a /login/ a los que estan logueados y no son staff les muestra un mensaje HttpResponse("No tienes acceso a esta parte.")

Agregando permisos personalizados

tambien puedes agregar o remover permisos en /admin, cerciórate de agregar admin.autodiscover() en urls.py

from django.conf.urls import include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = [
....

edita los grupos y usuarios en administracion y agregales permisos.

url: /admin/auth/user/user id/
none

para agregar un permiso, edita models.py

quedando algo asi:

from django.db import models

# Create your models here.
class Curso(models.Model):
    class Meta:
        permissions = (
            ("can_view_curso", "puede ver el curso"),
        )

ejecuta manage.py syncdb y ahora puedes hacer uso del decorator @permission_required('home.can_view_curso')

o en las plantillas:

<div>
    {% if perms.home.can_view_curso %}
        puedes ver el curso :D
    {% else %}
        no pueds ver esta area :(
    {% endif %}
    }
</div>

0voto

ibrames comentado

Excelente hermano. Muchas gracias!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta