#!/usr/bin/env python3 # -*- coding: utf-8 -*- """script_engine RBAC path registration. Run: python3 scripts/load_path.py (from module repo root) Explicit paths only - NO wildcards. """ import os import sys MODULE = 'script_engine' # paths accessible to any (logged-out) visitor PATHS_ANY = [ '/script_engine/menu.ui', ] # paths accessible to any authenticated user PATHS_LOGINED = [ '/script_engine', '/script_engine/index.ui', '/script_engine/script_execute_page.ui', '/script_engine/script_engine_list', '/script_engine/script_engine_list/index.ui', '/script_engine/script_engine_list/get_script_engine_list.dspy', '/script_engine/script_engine_list/add_script_engine.dspy', '/script_engine/script_engine_list/update_script_engine.dspy', '/script_engine/script_engine_list/delete_script_engine.dspy', '/script_engine/api/script_create.dspy', '/script_engine/api/script_update.dspy', '/script_engine/api/script_delete.dspy', '/script_engine/api/script_get.dspy', '/script_engine/api/script_list.dspy', '/script_engine/api/script_execute.dspy', '/script_engine/api/execute_script.dspy', '/script_engine/api/script_validate.dspy', '/script_engine/api/validate_script.dspy', '/script_engine/api/get_search_script_type.dspy', '/script_engine/api/get_search_status.dspy', ] # role-restricted paths PATHS_ROLE = [ ('/script_engine/api/script_create.dspy', 'owner.operator'), ('/script_engine/api/script_update.dspy', 'owner.operator'), ('/script_engine/api/script_delete.dspy', 'owner.operator'), ] def find_sage_root(): script_dir = os.path.dirname(os.path.abspath(__file__)) candidates = [ os.path.join(script_dir, '..', '..'), os.path.join(os.path.expanduser('~'), 'repos', 'sage'), os.path.join(os.path.expanduser('~'), 'sage'), ] for cand in candidates: cand = os.path.abspath(cand) if os.path.isdir(os.path.join(cand, 'wwwroot')) and os.path.isdir(os.path.join(cand, 'py3', 'bin')): return cand return None def register(sage_root, path, role): set_role_perm = os.path.join(sage_root, 'py3', 'bin', 'set_role_perm.py') if not os.path.exists(set_role_perm): print('set_role_perm.py not found: %s' % set_role_perm) return cmd = '%s %s %s %s' % (sys.executable, set_role_perm, role, path) print('RUN: %s' % cmd) os.system(cmd) def main(): sage_root = find_sage_root() if not sage_root: print('ERROR: sage root not found; skip RBAC registration') return for path in PATHS_ANY: register(sage_root, path, 'any') for path in PATHS_LOGINED: register(sage_root, path, 'logined') for path, role in PATHS_ROLE: register(sage_root, path, role) print('script_engine RBAC registration done') if __name__ == '__main__': main()