Skip to content

Commit 9aca45e

Browse files
authored
Fix exception in in-memory permission backend (#3493)
Fix an exception in the in-memory permission backend when user principles exist, and get_accessible_objects is called without bound permissions. Fixes #2687.
1 parent af77e2b commit 9aca45e

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

kinto/core/permission/memory.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,9 @@ def get_accessible_objects(self, principals, bound_permissions=None, with_childr
9898
candidates = []
9999
if bound_permissions is None:
100100
for key, value in self._store.items():
101-
_, object_id, permission = key.split(":", 2)
102-
candidates.append((object_id, permission, value))
101+
if key.startswith("permission:"):
102+
_, object_id, permission = key.split(":", 2)
103+
candidates.append((object_id, permission, value))
103104
else:
104105
for pattern, perm in bound_permissions:
105106
id_match = ".*" if with_children else "[^/]+"

kinto/core/permission/testing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,12 @@ def test_accessible_objects_without_match(self):
344344
)
345345
self.assertEqual(sorted(per_object_ids.keys()), ["/url/a", "/url/a/id/1", "/url/a/id/2"])
346346

347+
def test_accessible_objects_with_user_principle(self):
348+
self.permission.add_user_principal("user1", "group")
349+
self.permission.add_principal_to_ace("id1", "write", "user1")
350+
per_object_ids = self.permission.get_accessible_objects(["user1"])
351+
self.assertEqual(sorted(per_object_ids.keys()), ["id1"])
352+
347353
#
348354
# get_object_permissions()
349355
#

0 commit comments

Comments
 (0)