liuhua
liuhua
commited on
Commit
·
1483d00
1
Parent(s):
a83cbb2
Update authorization for team (#3262)
Browse files### What problem does this PR solve?
Update authorization for team.
#3253 #3233
### Type of change
- [x] Refactoring
---------
Co-authored-by: liuhua <[email protected]>
- api/apps/sdk/chat.py +6 -4
- api/apps/sdk/dataset.py +3 -0
- api/apps/sdk/doc.py +9 -9
- api/utils/api_utils.py +4 -1
- docs/references/http_api_reference.md +4 -4
api/apps/sdk/chat.py
CHANGED
@@ -34,10 +34,11 @@ def create(tenant_id):
|
|
34 |
if not ids:
|
35 |
return get_error_data_result(message="`dataset_ids` is required")
|
36 |
for kb_id in ids:
|
37 |
-
kbs = KnowledgebaseService.
|
38 |
if not kbs:
|
39 |
return get_error_data_result(f"You don't own the dataset {kb_id}")
|
40 |
-
|
|
|
41 |
if kb.chunk_num == 0:
|
42 |
return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
|
43 |
kbs = KnowledgebaseService.get_by_ids(ids)
|
@@ -160,9 +161,10 @@ def update(tenant_id,chat_id):
|
|
160 |
return get_error_data_result("`datasets` can't be empty")
|
161 |
if ids:
|
162 |
for kb_id in ids:
|
163 |
-
kbs = KnowledgebaseService.
|
164 |
if not kbs:
|
165 |
return get_error_data_result(f"You don't own the dataset {kb_id}")
|
|
|
166 |
kb = kbs[0]
|
167 |
if kb.chunk_num == 0:
|
168 |
return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
|
@@ -260,7 +262,7 @@ def delete(tenant_id):
|
|
260 |
def list_chat(tenant_id):
|
261 |
id = request.args.get("id")
|
262 |
name = request.args.get("name")
|
263 |
-
chat = DialogService.query(id=id,name=name,status=StatusEnum.VALID.value)
|
264 |
if not chat:
|
265 |
return get_error_data_result(message="The chat doesn't exist")
|
266 |
page_number = int(request.args.get("page", 1))
|
|
|
34 |
if not ids:
|
35 |
return get_error_data_result(message="`dataset_ids` is required")
|
36 |
for kb_id in ids:
|
37 |
+
kbs = KnowledgebaseService.accessible(kb_id=kb_id,user_id=tenant_id)
|
38 |
if not kbs:
|
39 |
return get_error_data_result(f"You don't own the dataset {kb_id}")
|
40 |
+
kbs = KnowledgebaseService.query(id=kb_id)
|
41 |
+
kb = kbs[0]
|
42 |
if kb.chunk_num == 0:
|
43 |
return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
|
44 |
kbs = KnowledgebaseService.get_by_ids(ids)
|
|
|
161 |
return get_error_data_result("`datasets` can't be empty")
|
162 |
if ids:
|
163 |
for kb_id in ids:
|
164 |
+
kbs = KnowledgebaseService.accessible(kb_id=chat_id, user_id=tenant_id)
|
165 |
if not kbs:
|
166 |
return get_error_data_result(f"You don't own the dataset {kb_id}")
|
167 |
+
kbs = KnowledgebaseService.query(id=kb_id)
|
168 |
kb = kbs[0]
|
169 |
if kb.chunk_num == 0:
|
170 |
return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
|
|
|
262 |
def list_chat(tenant_id):
|
263 |
id = request.args.get("id")
|
264 |
name = request.args.get("name")
|
265 |
+
chat = DialogService.query(id=id,name=name,status=StatusEnum.VALID.value,tenant_id=tenant_id)
|
266 |
if not chat:
|
267 |
return get_error_data_result(message="The chat doesn't exist")
|
268 |
page_number = int(request.args.get("page", 1))
|
api/apps/sdk/dataset.py
CHANGED
@@ -490,6 +490,9 @@ def list(tenant_id):
|
|
490 |
kbs = KnowledgebaseService.query(id=id, name=name, status=1)
|
491 |
if not kbs:
|
492 |
return get_error_data_result(message="The dataset doesn't exist")
|
|
|
|
|
|
|
493 |
page_number = int(request.args.get("page", 1))
|
494 |
items_per_page = int(request.args.get("page_size", 30))
|
495 |
orderby = request.args.get("orderby", "create_time")
|
|
|
490 |
kbs = KnowledgebaseService.query(id=id, name=name, status=1)
|
491 |
if not kbs:
|
492 |
return get_error_data_result(message="The dataset doesn't exist")
|
493 |
+
for kb in kbs:
|
494 |
+
if not KnowledgebaseService.accessible(kb_id=kb.id,user_id=tenant_id):
|
495 |
+
return get_error_data_result(message=f"You don't own the dataset {kb.id}")
|
496 |
page_number = int(request.args.get("page", 1))
|
497 |
items_per_page = int(request.args.get("page_size", 30))
|
498 |
orderby = request.args.get("orderby", "create_time")
|
api/apps/sdk/doc.py
CHANGED
@@ -450,7 +450,7 @@ def list_docs(dataset_id, tenant_id):
|
|
450 |
type: string
|
451 |
description: Processing status.
|
452 |
"""
|
453 |
-
if not KnowledgebaseService.
|
454 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}. ")
|
455 |
id = request.args.get("id")
|
456 |
name = request.args.get("name")
|
@@ -537,7 +537,7 @@ def delete(tenant_id, dataset_id):
|
|
537 |
schema:
|
538 |
type: object
|
539 |
"""
|
540 |
-
if not KnowledgebaseService.
|
541 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}. ")
|
542 |
req = request.json
|
543 |
if not req:
|
@@ -629,7 +629,7 @@ def parse(tenant_id, dataset_id):
|
|
629 |
schema:
|
630 |
type: object
|
631 |
"""
|
632 |
-
if not KnowledgebaseService.
|
633 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
634 |
req = request.json
|
635 |
if not req.get("document_ids"):
|
@@ -698,7 +698,7 @@ def stop_parsing(tenant_id, dataset_id):
|
|
698 |
schema:
|
699 |
type: object
|
700 |
"""
|
701 |
-
if not KnowledgebaseService.
|
702 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
703 |
req = request.json
|
704 |
if not req.get("document_ids"):
|
@@ -792,7 +792,7 @@ def list_chunks(tenant_id, dataset_id, document_id):
|
|
792 |
type: object
|
793 |
description: Document details.
|
794 |
"""
|
795 |
-
if not KnowledgebaseService.
|
796 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
797 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
798 |
if not doc:
|
@@ -964,7 +964,7 @@ def add_chunk(tenant_id, dataset_id, document_id):
|
|
964 |
type: string
|
965 |
description: Important keywords.
|
966 |
"""
|
967 |
-
if not KnowledgebaseService.
|
968 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
969 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
970 |
if not doc:
|
@@ -1077,7 +1077,7 @@ def rm_chunk(tenant_id, dataset_id, document_id):
|
|
1077 |
schema:
|
1078 |
type: object
|
1079 |
"""
|
1080 |
-
if not KnowledgebaseService.
|
1081 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
1082 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
1083 |
if not doc:
|
@@ -1172,7 +1172,7 @@ def update_chunk(tenant_id, dataset_id, document_id, chunk_id):
|
|
1172 |
res = ELASTICSEARCH.get(chunk_id, search.index_name(tenant_id))
|
1173 |
except Exception:
|
1174 |
return get_error_data_result(f"Can't find this chunk {chunk_id}")
|
1175 |
-
if not KnowledgebaseService.
|
1176 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
1177 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
1178 |
if not doc:
|
@@ -1312,7 +1312,7 @@ def retrieval_test(tenant_id):
|
|
1312 |
return get_error_data_result("`dataset_ids` should be a list")
|
1313 |
kbs = KnowledgebaseService.get_by_ids(kb_ids)
|
1314 |
for id in kb_ids:
|
1315 |
-
if not KnowledgebaseService.
|
1316 |
return get_error_data_result(f"You don't own the dataset {id}.")
|
1317 |
embd_nms = list(set([kb.embd_id for kb in kbs]))
|
1318 |
if len(embd_nms) != 1:
|
|
|
450 |
type: string
|
451 |
description: Processing status.
|
452 |
"""
|
453 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
454 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}. ")
|
455 |
id = request.args.get("id")
|
456 |
name = request.args.get("name")
|
|
|
537 |
schema:
|
538 |
type: object
|
539 |
"""
|
540 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
541 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}. ")
|
542 |
req = request.json
|
543 |
if not req:
|
|
|
629 |
schema:
|
630 |
type: object
|
631 |
"""
|
632 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
633 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
634 |
req = request.json
|
635 |
if not req.get("document_ids"):
|
|
|
698 |
schema:
|
699 |
type: object
|
700 |
"""
|
701 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
702 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
703 |
req = request.json
|
704 |
if not req.get("document_ids"):
|
|
|
792 |
type: object
|
793 |
description: Document details.
|
794 |
"""
|
795 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
796 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
797 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
798 |
if not doc:
|
|
|
964 |
type: string
|
965 |
description: Important keywords.
|
966 |
"""
|
967 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
968 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
969 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
970 |
if not doc:
|
|
|
1077 |
schema:
|
1078 |
type: object
|
1079 |
"""
|
1080 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
1081 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
1082 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
1083 |
if not doc:
|
|
|
1172 |
res = ELASTICSEARCH.get(chunk_id, search.index_name(tenant_id))
|
1173 |
except Exception:
|
1174 |
return get_error_data_result(f"Can't find this chunk {chunk_id}")
|
1175 |
+
if not KnowledgebaseService.accessible(kb_id=dataset_id, user_id=tenant_id):
|
1176 |
return get_error_data_result(message=f"You don't own the dataset {dataset_id}.")
|
1177 |
doc = DocumentService.query(id=document_id, kb_id=dataset_id)
|
1178 |
if not doc:
|
|
|
1312 |
return get_error_data_result("`dataset_ids` should be a list")
|
1313 |
kbs = KnowledgebaseService.get_by_ids(kb_ids)
|
1314 |
for id in kb_ids:
|
1315 |
+
if not KnowledgebaseService.accessible(kb_id=id, user_id=tenant_id):
|
1316 |
return get_error_data_result(f"You don't own the dataset {id}.")
|
1317 |
embd_nms = list(set([kb.embd_id for kb in kbs]))
|
1318 |
if len(embd_nms) != 1:
|
api/utils/api_utils.py
CHANGED
@@ -280,7 +280,10 @@ def construct_error_response(e):
|
|
280 |
def token_required(func):
|
281 |
@wraps(func)
|
282 |
def decorated_function(*args, **kwargs):
|
283 |
-
|
|
|
|
|
|
|
284 |
objs = APIToken.query(token=token)
|
285 |
if not objs:
|
286 |
return get_json_result(
|
|
|
280 |
def token_required(func):
|
281 |
@wraps(func)
|
282 |
def decorated_function(*args, **kwargs):
|
283 |
+
authorization_list=flask_request.headers.get('Authorization').split()
|
284 |
+
if len(authorization_list) < 2:
|
285 |
+
return get_json_result(data=False,message="Please check your authorization format.")
|
286 |
+
token = authorization_list[1]
|
287 |
objs = APIToken.query(token=token)
|
288 |
if not objs:
|
289 |
return get_json_result(
|
docs/references/http_api_reference.md
CHANGED
@@ -734,7 +734,7 @@ Deletes documents by ID.
|
|
734 |
curl --request DELETE \
|
735 |
--url http://{address}/api/v1/datasets/{dataset_id}/documents \
|
736 |
--header 'Content-Type: application/json' \
|
737 |
-
--header 'Authorization: <YOUR_API_KEY>' \
|
738 |
--data '
|
739 |
{
|
740 |
"ids": ["id_1","id_2"]
|
@@ -1148,7 +1148,7 @@ Updates content or configurations for a specified chunk.
|
|
1148 |
curl --request PUT \
|
1149 |
--url http://{address}/api/v1/datasets/{dataset_id}/documents/{document_id}/chunks/{chunk_id} \
|
1150 |
--header 'Content-Type: application/json' \
|
1151 |
-
--header 'Authorization: <YOUR_API_KEY>' \
|
1152 |
--data '
|
1153 |
{
|
1154 |
"content": "ragflow123",
|
@@ -1226,7 +1226,7 @@ Retrieves chunks from specified datasets.
|
|
1226 |
curl --request POST \
|
1227 |
--url http://{address}/api/v1/retrieval \
|
1228 |
--header 'Content-Type: application/json' \
|
1229 |
-
--header 'Authorization: <YOUR_API_KEY>' \
|
1230 |
--data '
|
1231 |
{
|
1232 |
"question": "What is advantage of ragflow?",
|
@@ -1934,7 +1934,7 @@ Deletes sessions by ID.
|
|
1934 |
curl --request DELETE \
|
1935 |
--url http://{address}/api/v1/chats/{chat_id}/sessions \
|
1936 |
--header 'Content-Type: application/json' \
|
1937 |
-
--header 'Authorization:
|
1938 |
--data '
|
1939 |
{
|
1940 |
"ids": ["test_1", "test_2"]
|
|
|
734 |
curl --request DELETE \
|
735 |
--url http://{address}/api/v1/datasets/{dataset_id}/documents \
|
736 |
--header 'Content-Type: application/json' \
|
737 |
+
--header 'Authorization: Bearer <YOUR_API_KEY>' \
|
738 |
--data '
|
739 |
{
|
740 |
"ids": ["id_1","id_2"]
|
|
|
1148 |
curl --request PUT \
|
1149 |
--url http://{address}/api/v1/datasets/{dataset_id}/documents/{document_id}/chunks/{chunk_id} \
|
1150 |
--header 'Content-Type: application/json' \
|
1151 |
+
--header 'Authorization: Bearer <YOUR_API_KEY>' \
|
1152 |
--data '
|
1153 |
{
|
1154 |
"content": "ragflow123",
|
|
|
1226 |
curl --request POST \
|
1227 |
--url http://{address}/api/v1/retrieval \
|
1228 |
--header 'Content-Type: application/json' \
|
1229 |
+
--header 'Authorization: Bearer <YOUR_API_KEY>' \
|
1230 |
--data '
|
1231 |
{
|
1232 |
"question": "What is advantage of ragflow?",
|
|
|
1934 |
curl --request DELETE \
|
1935 |
--url http://{address}/api/v1/chats/{chat_id}/sessions \
|
1936 |
--header 'Content-Type: application/json' \
|
1937 |
+
--header 'Authorization: Bearer <YOUR_API_KEY>' \
|
1938 |
--data '
|
1939 |
{
|
1940 |
"ids": ["test_1", "test_2"]
|