diff --git a/wagtail/utils/urlpatterns.py b/wagtail/utils/urlpatterns.py new file mode 100644 index 000000000..131a8f00b --- /dev/null +++ b/wagtail/utils/urlpatterns.py @@ -0,0 +1,9 @@ +def decorate_urlpatterns(urlpatterns, decorator): + for pattern in urlpatterns: + if hasattr(pattern, 'url_patterns'): + decorate_urlpatterns(pattern.url_patterns, decorator) + + if hasattr(pattern, '_callback'): + pattern._callback = decorator(pattern.callback) + + return urlpatterns diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index 9f60b110a..78241a12d 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -1,8 +1,10 @@ from django.conf.urls import url +from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.forms import PasswordResetForm from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar, page_privacy from wagtail.wagtailcore import hooks +from wagtail.utils.urlpatterns import decorate_urlpatterns urlpatterns = [ @@ -106,3 +108,11 @@ for fn in hooks.get_hooks('register_admin_urls'): urls = fn() if urls: urlpatterns += urls + + +urlpatterns = decorate_urlpatterns(urlpatterns, + permission_required( + 'wagtailadmin.access_admin', + login_url='wagtailadmin_login' + ) +)