template password_reset loginview login_required decorators custom django permissions admin decorator

password_reset - loginview django



Django is_staff author decorator (3)

Estoy tratando de limitar el acceso a las páginas usando 2 niveles de usuario. Superusuario y administrador El súper usuario es un usuario regular de Django con ''is_superuser'' asignado. El usuario administrador también es un usuario regular con solo el permiso ''is_staff'' asignado.

El problema es que cuando uso este decorador para un usuario administrador, no pasa la prueba:

@permission_required(''is_staff'') def my_view(....)

@permission_required(''is_staff'') devuelve falso para usuarios anónimos. (correcto)
@permission_required(''is_superuser'') solo devuelve verdadero para superusuarios (correcto)
@permission_required(''is_staff'') devuelve FALSE para usuarios con la permanente ''is_staff'' asignada. (incorrecto).

¿Alguna idea?


Para vistas basadas en clase, UserPassesTestMixin es conveniente, por ejemplo

class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin): def test_func(self): return self.request.user.is_staff ...


para Vistas basadas en clase, puede agregar permission_required(''is_staff'') a urls.py :

from django.contrib.auth.decorators import permission_required url(r''^your-url$'', permission_required(''is_staff'')(YourView.as_view()), name=''my-view''),


is_staff no es un permiso, así que en lugar de permission_required podrías usar:

@user_passes_test(lambda u: u.is_staff)

o

from django.contrib.admin.views.decorators import staff_member_required @staff_member_required