From e63ab3a67f6555eb13d6af477a8da9f1b54d6608 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Tue, 18 Jun 2024 01:39:03 -0400 Subject: [PATCH] fix: add permission implicator for file modes --- .../src/filesystem/FilesystemService.js | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/filesystem/FilesystemService.js b/packages/backend/src/filesystem/FilesystemService.js index 959264d88..25c8ad73e 100644 --- a/packages/backend/src/filesystem/FilesystemService.js +++ b/packages/backend/src/filesystem/FilesystemService.js @@ -137,7 +137,7 @@ class FilesystemService extends AdvancedBase { matcher: permission => { return permission.startsWith('fs:'); }, - checker: async (actor, permission) => { + checker: async ({ actor, permission }) => { if ( !(actor.type instanceof UserActorType) ) { return undefined; } @@ -162,6 +162,40 @@ class FilesystemService extends AdvancedBase { return {}; } + return undefined; + }, + })); + svc_permission.register_implicator(PermissionImplicator.create({ + matcher: permission => { + return permission.startsWith('fs:'); + }, + checker: async ({ actor, permission, recurse }) => { + const parts = PermissionUtil.split(permission); + if ( parts.length < 3 ) return undefined; + + const specified_mode = parts[2]; + + const mode = { + write: 'read', + read: 'list', + list: 'see', + }[specified_mode]; + + if ( ! mode ) return undefined; + + const perm = await recurse(actor, + PermissionUtil.join( + parts[0], + parts[1], + mode, + ...parts.slice(3), + ) + ) + if ( perm ) { + console.log('RETURNING IT!', perm); + return perm; + } + return undefined; }, }));