2012-08-17 18 views

risposta

90

Utilizzare il user_passes_test decoratore:

from django.contrib.auth.decorators import user_passes_test 

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

Nel caso in cui l'appartenenza del personale è sufficiente, è possibile utilizzare il @staff_member_required decoratore:

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

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

Ho downvoted perché membro dello staff non ha lo stesso permesso di superutente. –

+18

Quando sono arrivato qui questo è quello che stavo cercando, è per questo che l'ho messo qui, e lo lascerò qui perché penso che possa essere utile a qualcun altro. – Bit68

+2

È @ Bit68. Lo sto cercando :) –

1

Se si vuole avere una funzionalità simile a @staff_member_required puoi facilmente scrivere il tuo decoratore. Prendendo @staff_member come esempio possiamo fare sth come questo.

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 

Questo esempio è uno staff_member_ modificato, appena modificato un controllo in lambda.

Problemi correlati