48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""pbl_runtime_ext RBAC 路径注册(硬门禁 6.6 / QC #11)。
|
||
|
||
约定:
|
||
- 路径 = 模块自动路由 `/pbl_runtime_ext/api/<契约>.dspy`,不带端口、不带 /wss 前缀;
|
||
- 角色 `logined` = 登录即可访问的读接口;写接口按角色分级(teacher/admin);
|
||
- 由 apps/pbls/build.sh 第 8 步调用 `register()`;rbac CLI 不在位时打印清单(不静默跳过)。
|
||
"""
|
||
import os
|
||
import subprocess
|
||
import sys
|
||
|
||
MODULE = 'pbl_runtime_ext'
|
||
|
||
# (path, role)
|
||
PATHS = [
|
||
('/pbl_runtime_ext/api/pbl_runtime_event_append.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_runtime_event_poll.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_entity_state_get.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_entity_state_apply.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_world_broadcast.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_session_member_add.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_runtime_broadcast_pull.dspy', 'logined'),
|
||
('/pbl_runtime_ext/api/pbl_runtime_broadcast_stats.dspy', 'logined'),
|
||
|
||
]
|
||
|
||
|
||
def register():
|
||
tool = os.environ.get('RBAC_SET_PERM', 'set_role_perm.py')
|
||
done, missing = 0, []
|
||
for path, role in PATHS:
|
||
if subprocess.call([sys.executable if os.environ.get('PY') else 'python3',
|
||
tool, role, path],
|
||
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) == 0:
|
||
done += 1
|
||
else:
|
||
missing.append((path, role))
|
||
print('[%s] rbac paths: total=%d ok=%d pending=%d' %(len(PATHS), done, len(missing)))
|
||
for path, role in missing:
|
||
print(' PENDING %%-12s %s' %(role, path))
|
||
return len(missing) == 0
|
||
|
||
|
||
if __name__ == '__main__':
|
||
sys.exit(0 if register() else 1)
|