65 lines
1.9 KiB
Python
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()
|