2010-06-29 2 views
1

Dans mon URLconf, j'ai:Django - en limitant l'accès URL pour superutilisateurs

url(r'^sssssh/(.*)', staff_only_app.site.root), 

Ce que je voudrais faire est de limiter tout accès à cette application aux superutilisateurs. Je essayé ceci:

url(r'^sssssh/(.*)', user_passes_test(staff_only_app.site.root, lambda u: u.is_superuser)), 

Mais il se plaint décorant prend exactement 1 argument, et j'ai donné deux.

Je pense à la décoration du décorateur via functools.partial, mais j'ai pensé qu'il me manquait une solution plus évidente.

+1

Pourquoi voulez-vous le faire dans urls.py, vous devriez le faire dans views.py – KillianDS

+1

@KillianDS Je veux le faire dans urls.py parce que je ne veux pas aller et éditer toutes les vues dans un application réutilisable, je n'ai pas écrit. – Agos

Répondre

3

réponse très tard ...

Je pense qu'il est juste une syntaxe rapide et sale raccrochage:

url(r'^sssssh/(.*)', user_passes_test(lambda u: u.is_superuser)(staff_only_app.site.root), 

^Je pense que cela est étrange, mais syntaxe correcte pour passer un argument à un décorateur. Mais à la deuxième réflexion, vous ne pouvez décorer que des fonctions de vue, pas des sites entiers.

-1

Utilisez le décorateur user_passes_test.

exemple:

from django.contrib.auth.decorators import user_passes_test 

@user_passes_test(lambda u: u.is_superuser) 

def sample_view(request): 
+1

S'il vous plaît, lisez la question et les commentaires ci-dessous sur pourquoi je veux (ed) le faire dans les URL et non dans les vues. – Agos