fix: parent's permissions were overwriting masks' permissions with maskOnly, but only while listing
Massimo Melina committed
Oct 2, 2024 at 23:03 UTC
13a42653af0f4d2fe241ed2401176ceeb3003da9
2 files changed
+5
-4
src/vfs.ts
+4
-4
@@ -272,7 +272,7 @@ export async function* walkNode(parent: VfsNode, {
272
const name = prefixPath + nodeName
273
took?.add(normalizeFilename(name))
274
const item = { ...child, name }
275
- if (!canSee(item)) continue
275
+ if (!await canSee(item)) continue
276
if (item.source) // real items must be accessible
277
try { await fs.access(item.source) }
278
catch { continue }
@@ -313,7 +313,7 @@ export async function* walkNode(parent: VfsNode, {
313
}
314
if (isFolder) // store it even if we can't see it (masks), as its children can be produced by dirStream
315
parentsCache.set(name, item)
316
- if (canSee(item))
316
+ if (await canSee(item))
317
yield item
318
}
319
}
@@ -322,9 +322,9 @@ export async function* walkNode(parent: VfsNode, {
322
}
323
324
// item will be changed, so be sure to pass a temp node
325
- function canSee(item: VfsNode) {
325
+ async function canSee(item: VfsNode) {
326
// we basename for depth>0 where we already have the rest of the path in the parent's url, and would be duplicated
327
- maskApplier(item, basename(getNodeName(item)))
327
+ await maskApplier(item, basename(getNodeName(item)))
328
inheritFromParent(parent, item)
329
if (ctx && !hasPermission(item, 'can_see', ctx)) return
330
item.isTemp = true
tests/config.yaml
+1
@@ -119,6 +119,7 @@ vfs:
119
can_see: false
120
masks:
121
"*":
122
+ maskOnly: folders
123
can_see: true
124
children:
125
- name: hi