rag/wwwroot/knowledge_bases_list/new_tree_item.dspy
ymq 1c1ef65931 feat(rag): 机构rags目录+容量检查参数化+KB级角色权限
- 存储: 知识库文件存 {workspace_base}/{org}/rags/{kb}/ (机构目录下开设rags目录)
- 容量: rag_check_storage_quota 参数控制是否检查机构上限(默认不检查)
- 权限: rag_knowledge_bases 加 maintain_roles/search_roles; 空=同机构默认可用
  维护入口(upload/delete/rename/tree/tags)校验maintain; 检索入口(search/file_list/file_serve)校验search
- file_serve.dspy: 下载/预览走校验端点, 堵住/idfile/猜路径越权
- 机构隔离: 跨机构KB一律拒绝
2026-09-02 12:09:16 +08:00

21 lines
950 B
Plaintext

ns = params_kw.copy()
db = DBPools()
dbname = get_module_dbname('rag')
async with db.sqlorContext(dbname) as sor:
dir_id = uuid()
name = ns.get("name", "")
parent_id = ns.get("parentid", "")
kb_id = ns.get("kb_id", "")
# KB 维护角色校验
from rag.init import check_kb_perm
env = request._run_ns
_ok, _kb, _msg = await check_kb_perm(env, sor, kb_id, 'maintain')
if not _ok:
return json.dumps({"status": "error", "error": _msg}, ensure_ascii=False)
await sor.sqlExe(
"INSERT INTO rag_document_chunks (id, doc_id, kb_id, chunk_index, chunk_type, content, description, created_at) "
"VALUES (${id}$, '', ${kb_id}$, 0, 'directory', ${name}$, ${parentid}$, NOW())",
{"id": dir_id, "kb_id": kb_id, "name": name, "parentid": parent_id})
return {"widgettype": "Message", "options": {"user_data": {"id": dir_id, "label": name, "parentid": parent_id}}}
return {"error": "failed"}