rag/scripts/load_path.py
ymq 00262a6d2a feat(rag-api): 对外B2B API+内部tools包装
- wwwroot/api/ 六个对外端点(Bearer Key 鉴权,路由授 any、业务鉴权在 api_core):
  kb_create/kb_delete/doc_upload/doc_delete/tag_create/doc_set_tags/search
- rag/api_core.py: verify_api_key + make_api_env(org注入) + 六个业务核心
  (复用 init.py 底层检索/入库能力,杜绝双实现分叉)
- 统一返回格式 {"status":"ok"|"error","data":...}
- rag/ingest.py: 入库管线从 upload_file.dspy 抽出共享(UI/API同一引擎)
- rag/tools.py: RAG_TOOL_SCHEMAS + exec_rag_tool(与API同构,供内部助手调用)
- rag_api_keys 表 model(key 只存 SHA256);管理端 api_key_create/list/revoke
- load_path.py 注册 7 个 API 端点(any) + 3 个管理端点(logined)
2026-09-03 15:51:19 +08:00

94 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""RBAC path registration for rag module.
在宿主应用根目录执行py3/bin/python pkgs/rag/scripts/load_path.py
pipeline-app 的 load_path.sh 会自动扫描 pkgs/*/scripts/load_path.py 调用本脚本。
"""
import subprocess
MOD = "rag"
# 静态资源 + 免登录可访问
PATHS_ANY = [
f"/{MOD}/knowledge_bases_list/upload.js",
]
# 对外 B2B API 端点(路由权限授 any业务鉴权靠 rag_api_keys 的 Bearer Key
# org 隔离与 scopes 在 rag/api_core.py 内强制——见模块 README「对外 API」
PATHS_API_ANY = [
f"/{MOD}/api/kb_create.dspy",
f"/{MOD}/api/kb_delete.dspy",
f"/{MOD}/api/doc_upload.dspy",
f"/{MOD}/api/doc_delete.dspy",
f"/{MOD}/api/tag_create.dspy",
f"/{MOD}/api/doc_set_tags.dspy",
f"/{MOD}/api/search.dspy",
]
# 登录用户可访问(知识库管理全部端点)
PATHS_LOGINED = [
f"/{MOD}",
# 知识库列表与详情
f"/{MOD}/knowledge_bases_list/index.ui",
f"/{MOD}/knowledge_bases_list/detail.ui",
f"/{MOD}/knowledge_bases_list/search.ui",
f"/{MOD}/knowledge_bases_list/new_kb_form.ui",
f"/{MOD}/knowledge_bases_list/kb_list.dspy",
f"/{MOD}/knowledge_bases_list/kb_options.dspy",
f"/{MOD}/knowledge_bases_list/create_kb.dspy",
f"/{MOD}/knowledge_bases_list/rename_kb.dspy",
f"/{MOD}/knowledge_bases_list/rename_kb_form.dspy",
f"/{MOD}/knowledge_bases_list/delete_kb.dspy",
f"/{MOD}/knowledge_bases_list/confirm_delete_form.dspy",
f"/{MOD}/knowledge_bases_list/embedding_options.dspy",
# 文件与目录树
f"/{MOD}/knowledge_bases_list/file_list.dspy",
f"/{MOD}/knowledge_bases_list/upload.dspy",
f"/{MOD}/knowledge_bases_list/upload_file.dspy",
f"/{MOD}/knowledge_bases_list/delete_file.dspy",
f"/{MOD}/knowledge_bases_list/batch_ingest.dspy",
f"/{MOD}/knowledge_bases_list/get_tree_data.dspy",
f"/{MOD}/knowledge_bases_list/new_tree_item.dspy",
f"/{MOD}/knowledge_bases_list/update_tree_item.dspy",
f"/{MOD}/knowledge_bases_list/delete_tree_item.dspy",
# 检索与分析
f"/{MOD}/knowledge_bases_list/search_result.dspy",
f"/{MOD}/knowledge_bases_list/analysis.dspy",
f"/{MOD}/knowledge_bases_list/media_cards.dspy",
# 标签
f"/{MOD}/knowledge_bases_list/tag_form.dspy",
f"/{MOD}/knowledge_bases_list/tag_options.dspy",
f"/{MOD}/knowledge_bases_list/add_tag.dspy",
f"/{MOD}/knowledge_bases_list/save_tags.dspy",
# 存储用量
f"/{MOD}/knowledge_bases_list/storage_card.dspy",
f"/{MOD}/knowledge_bases_list/storage_stats.dspy",
# 对外 API Key 管理(管理端,登录会话鉴权)
f"/{MOD}/knowledge_bases_list/api_key_create.dspy",
f"/{MOD}/knowledge_bases_list/api_key_list.dspy",
f"/{MOD}/knowledge_bases_list/api_key_revoke.dspy",
# CRUD 管理页
f"/{MOD}/documents_list/index.ui",
f"/{MOD}/engine_configs_list/index.ui",
f"/{MOD}/engine_configs_list/engine_form.dspy",
f"/{MOD}/engine_configs_list/engine_options.dspy",
f"/{MOD}/engine_configs_list/engine_save.dspy",
f"/{MOD}/engine_configs_list/engine_test.dspy",
f"/{MOD}/subscriptions_list/index.ui",
]
def register_paths():
for path in PATHS_ANY:
subprocess.run(["py3/bin/python", "set_role_perm.py", "any", path])
print(f" any: {path}")
for path in PATHS_LOGINED:
subprocess.run(["py3/bin/python", "set_role_perm.py", "logined", path])
print(f" logined: {path}")
if __name__ == "__main__":
print(f"=== {MOD} RBAC registration ===")
register_paths()
print(f"Done. any={len(PATHS_ANY)} logined={len(PATHS_LOGINED)}")