2012-06-07 28 views
6

Tengo un CB DeleteView que intento decorar con el permiso de Guardian. El permiso debe ser para el usuario que ha iniciado sesión y para el objeto de DeleteView. Los documentos de Guardian no son muy claros al respecto, así que me pregunto si alguien podría aclarar.Django Guardian - ¿Cómo usar un decorador con permiso de uso con una vista basada en clase?

+0

Su pregunta es similar a esta, miren. http://stackoverflow.com/questions/6069070/how-to-use-permission-required-decorators-on-django-based-based-views –

Respuesta

0

Para decorar cada instancia de una vista basada en clases, necesita decorar la definición de clase. Para ello se aplica el decorador con el método de envío() de la jemplo class.For,

class ExampleView(TemplateView): 
    template_name = 'Example.html' 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(ExampleView, self).dispatch(*args, **kwargs) 
+0

Soy consciente de esto. Sin embargo, específicamente pregunto cómo incluir al usuario y el objeto modelo en el decorador de permisos Guardian en un CBV. ¡Gracias! –

4

me encontré con casi el mismo problema y aquí está mi solución (adaptado a su caso):

vistas .py

class MyModelDeleteView(DeleteView): 
    model=MyModel 

    @method_decorator(permission_required_or_403('myapp.delete_mymodel', 
     (MyModel, 'slug', 'slug'), accept_global_perms=True)) 
    def dispatch(self, *args, **kwargs): 
     return super(MyModelDeleteView, self).dispatch(*args, **kwargs) 

Nota que puede pasar accept_global_perms de parámetros, que es Falso por defecto. Permite a los usuarios con 'myapp.delete_mymodel' permiso para eliminar cualquier objeto de la clase MyModel. Esto puede ser útil para los moderadores, por ejemplo.

Guardian Decorators documentation.

Cuestiones relacionadas