Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions src/moin/storage/middleware/protecting.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,34 @@ def _get_acls(self, itemid=None, fqname=None):
q = fqname.query
else:
raise ValueError("need itemid or fqname")
item = self.get_item(**q)
acl = item.acl
fqname = item.fqname
if acl is not None:
return [acl]
acl_cfg = self._get_configured_acls(fqname)
if acl_cfg["hierarchic"]:

meta_available = False
if self.meta:
"""use meta data if available to avoid index query"""
meta_keys = [*self.meta.keys()]
if (
itemid
and fqname
and FQNAMES in meta_keys
and ITEMID in meta_keys
and itemid == self.meta[ITEMID]
and fqname == self.meta[FQNAMES][0]
):
meta_available = True
if ACL in meta_keys:
acl = self.meta[ACL]
return [acl]

item = None
if not meta_available or self._get_configured_acls(fqname)["hierarchic"]:
"""self.meta is not valid or namespace uses hierarchic acls and we need item parentids"""
item = self.get_item(**q)
acl = item.acl
fqname = item.fqname
if acl is not None:
return [acl]

if self._get_configured_acls(fqname)["hierarchic"]:
# check parent(s), recursively
parentids = item.parentids
if parentids:
Expand Down