Skip to content

Commit e63ab3a

Browse files
committed
fix: add permission implicator for file modes
1 parent 4aa72ea commit e63ab3a

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

packages/backend/src/filesystem/FilesystemService.js

+35-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class FilesystemService extends AdvancedBase {
137137
matcher: permission => {
138138
return permission.startsWith('fs:');
139139
},
140-
checker: async (actor, permission) => {
140+
checker: async ({ actor, permission }) => {
141141
if ( !(actor.type instanceof UserActorType) ) {
142142
return undefined;
143143
}
@@ -162,6 +162,40 @@ class FilesystemService extends AdvancedBase {
162162
return {};
163163
}
164164

165+
return undefined;
166+
},
167+
}));
168+
svc_permission.register_implicator(PermissionImplicator.create({
169+
matcher: permission => {
170+
return permission.startsWith('fs:');
171+
},
172+
checker: async ({ actor, permission, recurse }) => {
173+
const parts = PermissionUtil.split(permission);
174+
if ( parts.length < 3 ) return undefined;
175+
176+
const specified_mode = parts[2];
177+
178+
const mode = {
179+
write: 'read',
180+
read: 'list',
181+
list: 'see',
182+
}[specified_mode];
183+
184+
if ( ! mode ) return undefined;
185+
186+
const perm = await recurse(actor,
187+
PermissionUtil.join(
188+
parts[0],
189+
parts[1],
190+
mode,
191+
...parts.slice(3),
192+
)
193+
)
194+
if ( perm ) {
195+
console.log('RETURNING IT!', perm);
196+
return perm;
197+
}
198+
165199
return undefined;
166200
},
167201
}));

0 commit comments

Comments
 (0)