#!/usr/bin/env python3 # -*- coding: utf-8 -*- """pbl_validation RBAC 路径注册(硬门禁 6.6 / QC #11)。 约定: - 路径 = 模块自动路由 `/pbl_validation/api/<契约>.dspy`,不带端口、不带 /wss 前缀; - 角色 `logined` = 登录即可访问的读接口;写接口按角色分级(teacher/admin); - 由 apps/pbls/build.sh 第 8 步调用 `register()`;rbac CLI 不在位时打印清单(不静默跳过)。 """ import os import subprocess import sys MODULE = 'pbl_validation' # (path, role) PATHS = [ ('/pbl_validation/api/pbl_validation_run.dspy', 'logined'), ('/pbl_validation/api/pbl_validation_get.dspy', 'logined'), ('/pbl_validation/api/pbl_validation_list.dspy', 'logined'), ('/pbl_validation/api/pbl_validation_rule_list.dspy', 'logined'), ('/pbl_validation/api/pbl_validation_rule_save.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)