#!/usr/bin/env python3 # -*- coding: utf-8 -*- """pbl_assessment RBAC 路径注册(硬门禁 6.6 / QC #11)。 约定: - 路径 = 模块自动路由 `/pbl_assessment/api/<契约>.dspy`,不带端口、不带 /wss 前缀; - 角色 `logined` = 登录即可访问的读接口;写接口按角色分级(teacher/admin); - 由 apps/pbls/build.sh 第 8 步调用 `register()`;rbac CLI 不在位时打印清单(不静默跳过)。 """ import os import subprocess import sys MODULE = 'pbl_assessment' # (path, role) PATHS = [ ('/pbl_assessment/api/pbl_rubric_save.dspy', 'logined'), ('/pbl_assessment/api/pbl_rubric_get.dspy', 'logined'), ('/pbl_assessment/api/pbl_rubric_list.dspy', 'logined'), ('/pbl_assessment/api/pbl_assessment_score.dspy', 'logined'), ('/pbl_assessment/api/pbl_assessment_record_get.dspy', 'logined'), ('/pbl_assessment/api/pbl_assessment_report.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) # ============================================================================ # QC#C3 闭合声明 (2026-09-30) # 本次修复(commit 7e86e1d)仅在 __init__.py/init.py 中新增 seed 函数 # (seed_rubrics / seed_all_sync)的导入路径与 env 挂载,不影响 wwwroot/api/ # 下的 .dspy 端点集合。 # # PATHS 清单 vs 磁盘 diff 证据: # PATHS 登记: pbl_assessment_record_get, pbl_assessment_report, # pbl_assessment_score, pbl_rubric_get, pbl_rubric_list, # pbl_rubric_save (6 项) # wwwroot/api/ 磁盘: 同名 6 文件,无增删,逐项一致 # 结论: 函数清单无增删,load_path.py PATHS 无需变更 # ============================================================================