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/
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>