script_engine/scripts/load_path.py

90 lines
2.8 KiB
Python

#!/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()