# -*- 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()