Skip to content

Commit 5eae35e

Browse files
committed
_get_acls: use meta data if available to avoid index query
1 parent 20c44ac commit 5eae35e

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

src/moin/storage/middleware/protecting.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,34 @@ def _get_acls(self, itemid=None, fqname=None):
132132
q = fqname.query
133133
else:
134134
raise ValueError("need itemid or fqname")
135-
item = self.get_item(**q)
136-
acl = item.acl
137-
fqname = item.fqname
138-
if acl is not None:
139-
return [acl]
140-
acl_cfg = self._get_configured_acls(fqname)
141-
if acl_cfg["hierarchic"]:
135+
136+
meta_available = False
137+
if self.meta:
138+
"""use meta data if available to avoid index query"""
139+
meta_keys = [*self.meta.keys()]
140+
if (
141+
itemid
142+
and fqname
143+
and FQNAMES in meta_keys
144+
and ITEMID in meta_keys
145+
and itemid == self.meta[ITEMID]
146+
and fqname == self.meta[FQNAMES][0]
147+
):
148+
meta_available = True
149+
if ACL in meta_keys:
150+
acl = self.meta[ACL]
151+
return [acl]
152+
153+
item = None
154+
if not meta_available or self._get_configured_acls(fqname)["hierarchic"]:
155+
"""self.meta is not valid or namespace uses hierarchic acls and we need item parentids"""
156+
item = self.get_item(**q)
157+
acl = item.acl
158+
fqname = item.fqname
159+
if acl is not None:
160+
return [acl]
161+
162+
if self._get_configured_acls(fqname)["hierarchic"]:
142163
# check parent(s), recursively
143164
parentids = item.parentids
144165
if parentids:

0 commit comments

Comments
 (0)