2011-04-04 39 views
6

que entienden la autenticación de usuario básico, iniciar sesión, crear cuentas, que se extiende usuario del modelo ...grupos de usuarios de Django con decoradores vs permiso

Estoy tratando de crear un sitio donde los profesores y estudiantes pueden iniciar sesión. Los maestros tendrían acceso a páginas estudiantes no pueden acceder a los derechos para publicar tareas ect ...

Creo que es posible hacer esto con:

  1. Asignación de un usuario a un grupo específico en la creación.
  2. Uso de decoradores para limitar el acceso al grupo apropiado.

.

@login_required 
@user_passes_test(not_in_student_group, login_url='/login/') 
def some_view(request): 
    # ... 

def not_in_student_group(user): 
if user: 
    return user.groups.filter(name='Student').count() == 0 
return False 

nota me dieron el código de:

http://bradmontgomery.blogspot.com/2009/04/restricting-access-by-group-in-django.html

Pregunta:

  1. ¿Cómo utilizar el permiso difieren del enfoque anterior?

  2. ¿Cómo se pueden usar los permisos y cómo los permisos de definición me ayudan a lograr los resultados anteriores? (Si es posible hacerlo, debe usarse?)

Respuesta

4

Parece que hay cientos de formas que las personas llegan a los mismos resultados en Django con respecto a la autorización y permisos. Los grupos son una forma, definitivamente.

Los permisos de Django generalmente se basan en sus datos, por lo tanto "basados ​​en tablas" o "basados ​​en filas". Los permisos basados ​​en filas no son nativos de Django, tienes que rodar tu propia solución o usar algo como django-guardian o django-authority More Here.

La documentación sobre permisos son here

class Quiz(models.Model): 
    title = models.CharField(max_length=64) 

    class Meta: 
     permissions = (
      ("can_take_quiz", "Can take quiz"), 
      ("can_grade_quiz", "Can Grade Quiz"), 
     ) 

Con este modelo, y estos permisos, se podía ver que, posiblemente, un ayudante de estudiante se le dio permiso para la calificación de un concurso en particular, o un concurso para un profesor dado , aquí es donde los permisos basados ​​en filas serían útiles. Implementar algo así (a través de has_permission) puede resolver un problema (y es más explícito) que simplemente agregar un usuario a un grupo.

Puede agregar usuarios a grupos como los que ya tiene y otorgar permisos completos al grupo completo para agregar un cuestionario, o quizes de calificación (los profesores pueden agregar/editar/eliminar/calificar, los estudiantes pueden tomar) quizes y check based en ese.

luego su user_passes_test sería user.has_perm('quiz.take_quiz') o en lugar de un decorador, podría pasar la prueba específica a su objeto basado en el back-end.

Cuestiones relacionadas