entity/scripts/load_path.py

66 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
entity 模块 RBAC 路径注册脚本(显式路径,禁止通配符)。
用法python scripts/load_path.py自动寻找 Sage 根目录并调用 set_role_perm.py
维护规则:每次新增/删除 wwwroot 下 path需同步更新本脚本。
"""
import os
import subprocess
MODULE = 'entity'
PATHS_ANY = [
f'/{MODULE}/index.ui',
]
PATHS_LOGINED = [
f'/{MODULE}',
f'/{MODULE}/index.ui',
f'/{MODULE}/import_page.ui',
f'/{MODULE}/api/entity_list.dspy',
f'/{MODULE}/api/entity_create.dspy',
f'/{MODULE}/api/entity_update.dspy',
f'/{MODULE}/api/entity_delete.dspy',
f'/{MODULE}/api/entity_get.dspy',
f'/{MODULE}/api/entity_import.dspy',
f'/{MODULE}/api/entity_import_guard.dspy',
f'/{MODULE}/api/entity_import_list.dspy',
f'/{MODULE}/api/entity_import_reject.dspy',
f'/{MODULE}/api/get_search_entity_type.dspy',
f'/{MODULE}/api/get_search_status.dspy',
f'/{MODULE}/api/get_search_import_status.dspy',
f'/{MODULE}/api/get_search_scene_id.dspy',
f'/{MODULE}/api/get_search_world_id.dspy',
]
def find_sage_root():
here = os.path.dirname(os.path.abspath(__file__))
candidates = [
os.path.abspath(os.path.join(here, '..', '..', '..', '..')),
os.path.expanduser('~/repos/sage'),
os.path.expanduser('~/sage'),
]
for c in candidates:
if os.path.isdir(os.path.join(c, 'wwwroot')) and os.path.isdir(os.path.join(c, 'py3', 'bin')):
return c
return None
def main():
sage_root = find_sage_root()
if not sage_root:
print('[entity] sage root not found, skip RBAC registration')
return
python = os.path.join(sage_root, 'py3', 'bin', 'python')
set_role = os.path.join(sage_root, 'py3', 'bin', 'set_role_perm.py')
for p in PATHS_ANY:
subprocess.call([python, set_role, p, 'any'])
for p in PATHS_LOGINED:
subprocess.call([python, set_role, p, 'logined'])
print(f'[entity] RBAC registered: {len(PATHS_ANY)} any + {len(PATHS_LOGINED)} logined')
if __name__ == '__main__':
main()