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 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.query(id=kb_id,tenant_id=tenant_id)
38
  if not kbs:
39
  return get_error_data_result(f"You don't own the dataset {kb_id}")
40
- kb=kbs[0]
 
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.query(id=kb_id, tenant_id=tenant_id)
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.query(id=dataset_id, tenant_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,7 +537,7 @@ def delete(tenant_id, dataset_id):
537
  schema:
538
  type: object
539
  """
540
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,7 +629,7 @@ def parse(tenant_id, dataset_id):
629
  schema:
630
  type: object
631
  """
632
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,7 +698,7 @@ def stop_parsing(tenant_id, dataset_id):
698
  schema:
699
  type: object
700
  """
701
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,7 +792,7 @@ def list_chunks(tenant_id, dataset_id, document_id):
792
  type: object
793
  description: Document details.
794
  """
795
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,7 +964,7 @@ def add_chunk(tenant_id, dataset_id, document_id):
964
  type: string
965
  description: Important keywords.
966
  """
967
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,7 +1077,7 @@ def rm_chunk(tenant_id, dataset_id, document_id):
1077
  schema:
1078
  type: object
1079
  """
1080
- if not KnowledgebaseService.query(id=dataset_id, tenant_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,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.query(id=dataset_id, tenant_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,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.query(id=id, tenant_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:
 
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
- token = flask_request.headers.get('Authorization').split()[1]
 
 
 
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: Bear <YOUR_API_KEY>' \
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"]