diff --git a/cms/admin/pageadmin.py b/cms/admin/pageadmin.py index 7f3834cba3d..dc3a37ceee1 100644 --- a/cms/admin/pageadmin.py +++ b/cms/admin/pageadmin.py @@ -1018,6 +1018,14 @@ def has_delete_translation_permission(self, request, language, obj=None): ) return has_perm + def get_sites_for_user(self, user): + sites = Site.objects.order_by('name') + + if not get_cms_setting('PERMISSION') or user.is_superuser: + return sites + _has_perm = page_permissions.user_can_change_at_least_one_page + return [site for site in sites if _has_perm(user, site)] + def changelist_view(self, request, extra_context=None): from django.contrib.admin.views.main import ERROR_FLAG @@ -1090,6 +1098,7 @@ def changelist_view(self, request, extra_context=None): 'admin': self, 'tree': { 'site': site, + 'sites': self.get_sites_for_user(request.user), 'query': query, 'is_filtered': changelist_form.is_filtered(), 'items': pages, diff --git a/cms/tests/test_admin.py b/cms/tests/test_admin.py index 9c0e3840c00..6cbcf5c084d 100644 --- a/cms/tests/test_admin.py +++ b/cms/tests/test_admin.py @@ -736,7 +736,7 @@ def test_tree_view_queries(self): user = self.get_superuser() with self.login_user_context(user): - with self.assertNumQueries(6): + with self.assertNumQueries(7): force_str(self.client.get(self.get_pages_admin_list_uri('en'))) def test_smart_link_pages(self):