La situación es bastante simple: Escribo un sistema de blog multiusuario. El sistema debe evitar que un no propietario edite o elimine una publicación de blog. En mi opinión, uso la vista genérica.Agregar permiso de nivel de objeto a la vista genérica
BlogUpdateView clase (UpdateView): ...
Sé que debería utilizar para decorar @method_decorator método de envío. Sin embargo, la mayoría del ejemplo es simplemente @method_decorator (login_required) o permiso de nivel de modelo. ¿Cómo se puede aplicar el permiso de nivel de objeto para verificar si request.user es el autor de esta publicación de blog? Por ejemplo, traté de usar aplicaciones django-authority, y tengo una clase BlogPermission en este archivo. e intenté definir un método en esta clase, p.
def blog_edit(self, ??, ??)
¿Qué debo poner en este método?
y luego llamar a esto como: @method_decorator(permission_required('blog_permission.blog_edit(???)'))
¿Qué debería pasar aquí?
Actualización: Después de leer el código method_decorator, me parece que solo puede aceptar la función sin argumento. Creo que es por eso que el permiso requerido no funciona aquí. Pero ¿cuál es el trabajo alrededor de esto?
solución Actualización:
En el método de envío, puedo comprobar el permiso del usuario y luego regresar HttpResponseForbidden() si el usuario no cumple con el permiso.
Puede comprobar sus permisos en 'método get_object'. Los decoradores no se ven bien con CBV. – ilvar
, ¿quiere decir que no hay una manera fácil de aplicar el decorador de objetos a la vista genérica basada en la clase? @ilvar – Xinghan
Quiero decir que será más fácil de hacer en 'get_object'. Para hacerlo más SECO puedes hacer un Mixin con ese 'get_object' y usarlo. – ilvar