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