90 lines
2.8 KiB
Python
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()
|