world_snapshot/scripts/load_path.py

65 lines
1.9 KiB
Python

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