8000 Fixed #6335 -- Global permissions take precedence over cached page pe… · django-cms/django-cms@899a3d8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 899a3d8

Browse files
authored
Fixed #6335 -- Global permissions take precedence over cached page permissions (#6411)
1 parent 675de13 commit 899a3d8

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

cms/tests/test_permissions.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@
55
from cms.api import create_page, assign_user_to_page
66
from cms.cache.permissions import (get_permission_cache, set_permission_cache,
77
clear_user_permission_cache)
8+
from cms.models.permissionmodels import GlobalPagePermission
89
from cms.test_utils.testcases import CMSTestCase
9-
from cms.utils.page_permissions import get_change_id_list
10+
from cms.utils.page_permissions import get_change_id_list, user_can_publish_page
1011

1112

12-
@override_settings(CMS_PERMISSION=True)
13+
@override_settings(
14+
CMS_PERMISSION=True,
15+
CMS_CACHE_DURATIONS={
16+
'menus': 60,
17+
'content': 60,
18+
'permissions': 60,
19+
},
20+
)
1321
class PermissionCacheTests(CMSTestCase):
1422

1523
def setUp(self):
@@ -51,3 +59,28 @@ def test_permission_manager(self):
5159
"change_page")
5260
self.assertEqual(live_permissions, [page_b.id])
5361
self.assertEqual(cached_permissions_permissions, live_permissions)
62+
63+
def test_cached_permission_precedence(self):
64+
# refs - https://github.com/divio/django-cms/issues/6335
65+
# cached page permissions should not override global permissions
66+
page = create_page(
67+
"test page",
68+
"nav_playground.html",
69+
"en",
70+
created_by=self.user_super,
71+
)
72+
page_permission = GlobalPagePermission.objects.create(
73+
can_change=True,
74+
can_publish=True,
75+
user=self.user_normal,
76+
)
77+
page_permission.sites.add(Site.objects.get_current())
78+
set_permission_cache(self.user_normal, "publish_page", [])
79+
80+
can_publish = user_can_publish_page(
81+
self.user_normal,
82+
page,
83+
Site.objects.get_current(),
84+
)
85+
self.assertTrue(can_publish)
86+

cms/utils/page_permissions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ def _get_page_ids_for_action(user, site, action, check_global=True, use_cache=Tr
5454
# just return grant all mark
5555
return GRANT_ALL_PERMISSIONS
5656

57+
if check_global and has_global_permission(user, site, action=action, use_cache=use_cache):
58+
return GRANT_ALL_PERMISSIONS
59+
5760
if use_cache:
5861
# read from cache if possible
5962
cached = get_permission_cache(user, action)
@@ -65,9 +68,6 @@ def _get_page_ids_for_action(user, site, action, check_global=True, use_cache=Tr
6568
if cached is not None:
6669
return cached
6770

68-
if check_global and has_global_permission(user, site, action=action, use_cache=use_cache):
69-
return GRANT_ALL_PERMISSIONS
70-
7171
page_actions = get_page_actions(user, site)
7272
page_ids = list(page_actions[action])
7373
set_permission_cache(user, action, page_ids)

0 commit comments

Comments
 (0)
0