- 存储: 知识库文件存 {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一律拒绝
20 lines
905 B
Plaintext
20 lines
905 B
Plaintext
ns = params_kw.copy()
|
||
db = DBPools()
|
||
dbname = get_module_dbname('rag')
|
||
async with db.sqlorContext(dbname) as sor:
|
||
id = ns.get("id", "")
|
||
name = ns.get("name", "")
|
||
# KB 维护角色校验(按节点反查 kb_id)
|
||
_recs = await sor.sqlExe("SELECT kb_id FROM rag_document_chunks WHERE id=${id}$", {"id": id})
|
||
await sor.sqlExe("COMMIT", {})
|
||
_kb_id = getattr(_recs[0], 'kb_id', '') if _recs else ''
|
||
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("UPDATE rag_document_chunks SET content=${name}$ WHERE id=${id}$",
|
||
{"name": name, "id": id})
|
||
return {"widgettype": "Message", "options": {"user_data": {"id": id, "label": name}}}
|
||
return {"error": "failed"}
|