2012-08-17 17 views

Respuesta

90

Utilice la user_passes_test decorador:

from django.contrib.auth.decorators import user_passes_test 

@user_passes_test(lambda u: u.is_superuser) 
def my_view(request): 
    ... 
33

En el caso de miembros del personal es suficiente, se puede utilizar el @staff_member_required decorador:

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

@staff_member_required 
def my_view(request): 
    ... 
+4

Bajé la votación porque el miembro del personal no tiene el mismo permiso que el superusuario. –

+18

Cuando vine aquí, esto es lo que estaba buscando, es por eso que lo puse aquí, y lo dejaré aquí porque creo que puede ser útil para otra persona. – Bit68

+2

Es @ Bit68. Lo estoy buscando :) –

1

Si usted quiere tener una funcionalidad similar a @staff_member_required puede escribir fácilmente su propio decorador. Tomando @staff_member como ejemplo, podemos hacer algo como esto.

from django.contrib.admin.views.decorators import user_passes_test 

def superuser_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME, 
        login_url='account_login_url'): 
    """ 
    Decorator for views that checks that the user is logged in and is a 
    superuser, redirecting to the login page if necessary. 
    """ 
    actual_decorator = user_passes_test(
     lambda u: u.is_active and u.is_superuser, 
     login_url=login_url, 
     redirect_field_name=redirect_field_name 
    ) 
    if view_func: 
     return actual_decorator(view_func) 
    return actual_decorator 

Este ejemplo es un staff_member_required modificado, acaba de cambiar un cheque en lambda.

Cuestiones relacionadas