Преглед на файлове

fix: share chat permission issue

Timothy J. Baek преди 1 година
родител
ревизия
f64ac3269f
променени са 2 файла, в които са добавени 21 реда и са изтрити 1 реда
  1. 12 0
      backend/apps/web/models/chats.py
  2. 9 1
      backend/apps/web/routers/chats.py

+ 12 - 0
backend/apps/web/models/chats.py

@@ -206,6 +206,18 @@ class ChatTable:
         except:
         except:
             return None
             return None
 
 
+    def get_chat_by_share_id(self, id: str) -> Optional[ChatModel]:
+        try:
+            chat = Chat.get(Chat.share_id == id)
+
+            if chat:
+                chat = Chat.get(Chat.id == id)
+                return ChatModel(**model_to_dict(chat))
+            else:
+                return None
+        except:
+            return None
+
     def get_chat_by_id_and_user_id(self, id: str, user_id: str) -> Optional[ChatModel]:
     def get_chat_by_id_and_user_id(self, id: str, user_id: str) -> Optional[ChatModel]:
         try:
         try:
             chat = Chat.get(Chat.id == id, Chat.user_id == user_id)
             chat = Chat.get(Chat.id == id, Chat.user_id == user_id)

+ 9 - 1
backend/apps/web/routers/chats.py

@@ -251,7 +251,15 @@ async def delete_shared_chat_by_id(id: str, user=Depends(get_current_user)):
 
 
 @router.get("/share/{share_id}", response_model=Optional[ChatResponse])
 @router.get("/share/{share_id}", response_model=Optional[ChatResponse])
 async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
 async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
-    chat = Chats.get_chat_by_id(share_id)
+    if user.role == "pending":
+        raise HTTPException(
+            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
+        )
+
+    if user.role == "user":
+        chat = Chats.get_chat_by_share_id(share_id)
+    elif user.role == "admin":
+        chat = Chats.get_chat_by_id(share_id)
 
 
     if chat:
     if chat:
         return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
         return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})