Browse Source

dev: migrate ACLService to use scan()

KernelDeimos 10 months ago
parent
commit
3b85e4eeba

+ 4 - 2
src/backend/src/services/auth/ACLService.js

@@ -22,6 +22,7 @@ const { get_user } = require("../../helpers");
 const { Context } = require("../../util/context");
 const BaseService = require("../BaseService");
 const { AppUnderUserActorType, UserActorType, Actor, SystemActorType, AccessTokenActorType } = require("./Actor");
+const { PermissionUtil } = require("./PermissionService");
 
 class ACLService extends BaseService {
     async check (actor, resource, mode) {
@@ -119,11 +120,12 @@ class ACLService extends BaseService {
         let perm_fsNode = fsNode;
         while ( ! await perm_fsNode.get('is-root') ) {
             for ( const mode of modes ) {
-                const perm = await svc_permission.check(
+                const reading = await svc_permission.scan(
                     actor,
                     `fs:${await perm_fsNode.get('uid')}:${mode}`
                 );
-                if ( perm ) {
+                const options = PermissionUtil.reading_to_options(reading);
+                if ( options.length > 0 ) {
                     // console.log('TRUE BECAUSE PERMISSION', perm)
                     // console.log(`fs:${await perm_fsNode.get('uid')}:${mode}`)
                     return true;

+ 15 - 3
src/backend/src/services/auth/PermissionService.js

@@ -154,6 +154,18 @@ class PermissionUtil {
             .join(':')
             ;
     }
+    
+    static reading_to_options (reading, options = []) {
+        for ( let finding of reading ) {
+            if ( finding.$ === 'option' ) {
+                options.push(finding);
+            }
+            if ( finding.$ === 'path' ) {
+                this.reading_to_options(finding.reading, options);
+            }
+        }
+        return options;
+    }
 }
 
 class PermissionService extends BaseService {
@@ -827,8 +839,8 @@ class PermissionService extends BaseService {
                         }),
                     })
 
-                    const reading = await this.scan(actor, permission);
-                    const util = require('node:util');
+                    let reading = await this.scan(actor, permission);
+                    // reading = PermissionUtil.reading_to_options(reading);
                     ctx.log(JSON.stringify(reading, undefined, '  '));
                 }
             },
@@ -847,7 +859,7 @@ class PermissionService extends BaseService {
                     })
 
                     const reading = await this.scan(actor, permission);
-                    const util = require('node:util');
+                    // reading = PermissionUtil.reading_to_options(reading);
                     ctx.log(JSON.stringify(reading, undefined, '  '));
                 }
             }