# -*- coding: utf-8 -*- """world_snapshot 模块 RBAC 注册脚本。所有 path 显式列出,禁止通配符。""" import os import sys MOD = 'world_snapshot' def _find_sage_root(): here = os.path.dirname(os.path.abspath(__file__)) candidates = [ os.path.join(here, '..', '..', '..'), os.path.expanduser('~/repos/sage'), os.path.expanduser('~/sage'), ] for c in candidates: c = os.path.abspath(c) if os.path.isdir(os.path.join(c, 'wwwroot')) and os.path.isdir(os.path.join(c, 'py3', 'bin')): return c return None PATHS_ANY = [f'/{MOD}/index.ui'] PATHS_LOGINED = [ f'/{MOD}', f'/{MOD}/world_snapshot', f'/{MOD}/world_snapshot/index.ui', f'/{MOD}/world_snapshot/get_world_snapshot.dspy', f'/{MOD}/world_snapshot/add_world_snapshot.dspy', f'/{MOD}/world_snapshot/update_world_snapshot.dspy', f'/{MOD}/world_snapshot/delete_world_snapshot.dspy', f'/{MOD}/api/create_snapshot.dspy', f'/{MOD}/api/restore_snapshot.dspy', f'/{MOD}/api/get_snapshot.dspy', f'/{MOD}/api/list_snapshots.dspy', f'/{MOD}/api/world_snapshot_update.dspy', f'/{MOD}/api/world_snapshot_delete.dspy', f'/{MOD}/api/list_worlds_for_snapshot.dspy', f'/{MOD}/api/list_snapshot_types.dspy', f'/{MOD}/api/list_snapshot_statuses.dspy', ] def main(): sage_root = _find_sage_root() if not sage_root: print('ERROR: Sage root not found, skip RBAC registration') sys.exit(1) sys.path.insert(0, os.path.join(sage_root, 'py3', 'bin')) sys.path.insert(0, sage_root) try: from set_role_perm import set_role_perm except Exception as e: print('WARN: cannot import set_role_perm: %s' % e) sys.exit(1) for path in PATHS_ANY: set_role_perm(path, 'any') for path in PATHS_LOGINED: set_role_perm(path, 'logined') print('RBAC registered for module %s' % MOD) if __name__ == '__main__': main()