DJANGO - AUTORIZACION BASICA

En esta sesión demostramos cómo utilizar el mecanismo de autorización de Django para restringir el acceso a ciertas vistas o funcionalidades de una aplicación, requiriendo la autenticación del usuario y/o la pertenencia a un grupo definido.

Cargando video...

NOTA: Solo puedes ver una versión limitada del video a baja resolución, si quieres ver la versión completa por favor regístrate y obtén alguno de nuestros planes!

Descripción del Vídeo

En Django podemos especificar la autorización (validar pertenencia a grupos-roles-privilegios) para controlar el acceso a nuestras vistas.

Además de la restricción simple de permitir acciones para usuarios autenticados, con la funcionalidad predeterminada incluida en 'django.contrib.auth', se incluyen tres privilegios para cada modelo en una aplicación: add, change y delete. Es común crear grupos para agrupar dichos privilegios y hacerlos más manejables.

Para facilitar la especificación de autorización, utilizaremos el paquete instalable django-braces.

Usando el sitio administrativo, podemos crear el grupo "puede_administrar_encuestas", que contenga los permisos para modificar los modelos de preguntas y opciones. Luego usaremos este grupo para restringir el acceso a las funcionalidades implementadas de agregar preguntas y opciones.

Código disponible en:
https://github.com/networkfaculty/Fundamentos-Django/releases/tag/d-2.3.10


Instalar paquete:
pip install django-braces

Restringir la votación sólo para los usuarios autenticados, en curso/encuestas/urls.py:

from django.conf.urls import url
from . import views
from django.contrib.auth.decorators import login_required, permission_required

urlpatterns = [
...
   url(r'^(?P<pk>\d+)/$', login_required(views.VistaDetalle.as_view()), name='detalle'),
...
]

Agregar restricciones de autorización por grupo en curso/encuestas/views.py

from .forms import *
from django.views.generic.edit import CreateView, UpdateView
from django.contrib.auth.views import redirect_to_login
from django.contrib.auth.decorators import login_required
from braces.views import LoginRequiredMixin, GroupRequiredMixin
…
# También podemos agregar LoginRequiredMixin para indicar que esta vista requiere autenticación
class VistaDetalle(LoginRequiredMixin, generic.DetailView):
    model = Pregunta
    template_name = 'encuestas/detalle.html'
# En el caso de una vista sencilla (método), podemos usar directamente el decorador login_required
@login_required
def votar(request, id_pregunta):
    pregunta = get_object_or_404( Pregunta, pk=id_pregunta )
…
# Para las vistas de crear y editar preguntas y opciones, utilizaremos GroupRequiredMixin
class VistaCrearPregunta(GroupRequiredMixin, CreateView):
    model = Pregunta
    form_class = FormPregunta
    template_name = 'encuestas/agregar_pregunta.html'
    success_url = reverse_lazy('encuestas:index')
    group_required = 'puede_administrar_encuestas'

class VistaEditarPregunta(GroupRequiredMixin, UpdateView):
    model = Pregunta
    form_class = FormPregunta
    template_name = 'encuestas/editar_pregunta.html'
    success_url = reverse_lazy('encuestas:index')
    group_required = 'puede_administrar_encuestas'

class VistaOpciones(GroupRequiredMixin, UpdateView):
...
    form_class = FormPregunta
    template_name = 'encuestas/editar_opciones.html'
    success_url = reverse_lazy('encuestas:index')
    group_required = 'puede_administrar_encuestas'
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()



Rating

Global

Ver video en playlist

comments powered by Disqus

Headshot of Juan Paredes

Juan Paredes

Ingeniero de Sistemas con amplia experiencia, especializado en el desarrollo y arquitectura de software.