add load from server role
This commit is contained in:
parent
49757604ba
commit
988cb0176a
@ -103,3 +103,15 @@ def set_last_login(login: str):
|
|||||||
cursor.execute("INSERT OR REPLACE INTO app_state (key, value) VALUES ('last_login', ?)", (login,))
|
cursor.execute("INSERT OR REPLACE INTO app_state (key, value) VALUES ('last_login', ?)", (login,))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
def get_current_access_token():
|
||||||
|
"""
|
||||||
|
Получает access_token для последней активной сессии.
|
||||||
|
:return: access_token или None, если сессия не найдена.
|
||||||
|
"""
|
||||||
|
last_login = get_last_login()
|
||||||
|
if not last_login:
|
||||||
|
return None
|
||||||
|
|
||||||
|
session = get_session(last_login)
|
||||||
|
return session['access_token'] if session else None
|
||||||
|
|||||||
23
app/core/models/user_models.py
Normal file
23
app/core/models/user_models.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
from uuid import UUID
|
||||||
|
from datetime import datetime
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
|
||||||
|
class UserPrivilege(BaseModel):
|
||||||
|
id: int
|
||||||
|
code: str
|
||||||
|
name: str
|
||||||
|
description: str
|
||||||
|
is_active: bool
|
||||||
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
class UserRoleData(BaseModel):
|
||||||
|
user_id: UUID = Field(..., description="ID пользователя")
|
||||||
|
user_privilege: Optional[UserPrivilege] = Field(None, description="Привилегия пользователя")
|
||||||
|
user_permissions: List[str] = Field(default_factory=list, description="Список кодов прав")
|
||||||
|
|
||||||
|
class UserRoleResponse(BaseModel):
|
||||||
|
status: str
|
||||||
|
data: UserRoleData
|
||||||
@ -91,6 +91,43 @@ async def register(login, password, invite=None):
|
|||||||
return False, f"{localizer.translate('Произошла ошибка')}: {e}"
|
return False, f"{localizer.translate('Произошла ошибка')}: {e}"
|
||||||
|
|
||||||
|
|
||||||
|
async def get_user_role(access_token: str):
|
||||||
|
"""
|
||||||
|
Получает роль и права пользователя по токену доступа.
|
||||||
|
|
||||||
|
:param access_token: Токен доступа пользователя
|
||||||
|
:return: Кортеж (успех: bool, данные: UserRoleData | str)
|
||||||
|
"""
|
||||||
|
url = f"{config.BASE_URL}/v1/user/role"
|
||||||
|
headers = {"Authorization": f"Bearer {access_token}"}
|
||||||
|
|
||||||
|
try:
|
||||||
|
async with httpx.AsyncClient(http2=True) as client:
|
||||||
|
response = await client.get(url, headers=headers)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
data = response.json()
|
||||||
|
if data.get("status") == "fine":
|
||||||
|
# Здесь можно добавить валидацию через Pydantic, если необходимо
|
||||||
|
# from app.core.models.user_models import UserRoleData
|
||||||
|
# user_role_data = UserRoleData(**data['data'])
|
||||||
|
return True, data['data']
|
||||||
|
else:
|
||||||
|
return False, data.get("detail", localizer.translate("Неизвестная ошибка ответа"))
|
||||||
|
|
||||||
|
elif response.status_code == 401:
|
||||||
|
return False, localizer.translate("Токен недействителен или истек")
|
||||||
|
elif response.status_code == 404:
|
||||||
|
return False, localizer.translate("Пользователь не найден")
|
||||||
|
else:
|
||||||
|
return False, f"{localizer.translate('Ошибка сервера')}: {response.status_code}"
|
||||||
|
|
||||||
|
except httpx.RequestError as e:
|
||||||
|
return False, f"{localizer.translate('Ошибка сети')}: {e}"
|
||||||
|
except Exception as e:
|
||||||
|
return False, f"{localizer.translate('Произошла ошибка')}: {e}"
|
||||||
|
|
||||||
|
|
||||||
# Пример использования (для тестирования)
|
# Пример использования (для тестирования)
|
||||||
async def main():
|
async def main():
|
||||||
# Замените на реальные данные для теста
|
# Замените на реальные данные для теста
|
||||||
|
|||||||
@ -40,6 +40,7 @@ class YobbleHomeView(QWidget):
|
|||||||
|
|
||||||
# 3. Нижняя панель навигации
|
# 3. Нижняя панель навигации
|
||||||
self.bottom_bar = self.create_bottom_bar()
|
self.bottom_bar = self.create_bottom_bar()
|
||||||
|
self.content_stack.setCurrentIndex(2)
|
||||||
content_layout.addWidget(self.bottom_bar)
|
content_layout.addWidget(self.bottom_bar)
|
||||||
|
|
||||||
main_layout.addWidget(self.content_widget)
|
main_layout.addWidget(self.content_widget)
|
||||||
@ -168,18 +169,18 @@ class YobbleHomeView(QWidget):
|
|||||||
bottom_bar_layout.setSpacing(10)
|
bottom_bar_layout.setSpacing(10)
|
||||||
|
|
||||||
btn_feed = self.create_tab_button("☰", "Лента", 0)
|
btn_feed = self.create_tab_button("☰", "Лента", 0)
|
||||||
btn_search = self.create_tab_button("🔍", "Поиск", 1)
|
btn_music = self.create_tab_button("🎵", "Музыка", 1)
|
||||||
btn_create = self.create_create_button()
|
btn_create = self.create_create_button()
|
||||||
btn_chats = self.create_tab_button("💬", "Чаты", 2)
|
btn_chats = self.create_tab_button("💬", "Чаты", 2)
|
||||||
btn_profile = self.create_tab_button("👤", "Лицо", 3)
|
btn_profile = self.create_tab_button("👤", "Лицо", 3)
|
||||||
|
|
||||||
bottom_bar_layout.addWidget(btn_feed)
|
bottom_bar_layout.addWidget(btn_feed)
|
||||||
bottom_bar_layout.addWidget(btn_search)
|
bottom_bar_layout.addWidget(btn_music)
|
||||||
bottom_bar_layout.addWidget(btn_create)
|
bottom_bar_layout.addWidget(btn_create)
|
||||||
bottom_bar_layout.addWidget(btn_chats)
|
bottom_bar_layout.addWidget(btn_chats)
|
||||||
bottom_bar_layout.addWidget(btn_profile)
|
bottom_bar_layout.addWidget(btn_profile)
|
||||||
|
|
||||||
for btn in [btn_feed, btn_search, btn_chats, btn_profile]:
|
for btn in [btn_feed, btn_music, btn_chats, btn_profile]:
|
||||||
btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
|
btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
|
||||||
btn.setFocusPolicy(Qt.NoFocus)
|
btn.setFocusPolicy(Qt.NoFocus)
|
||||||
|
|
||||||
@ -230,7 +231,7 @@ class YobbleHomeView(QWidget):
|
|||||||
|
|
||||||
def setup_content_pages(self):
|
def setup_content_pages(self):
|
||||||
self.content_stack.addWidget(QLabel("Контент Ленты"))
|
self.content_stack.addWidget(QLabel("Контент Ленты"))
|
||||||
self.content_stack.addWidget(QLabel("Контент Поиска"))
|
self.content_stack.addWidget(QLabel("Контент Музыки"))
|
||||||
self.content_stack.addWidget(QLabel("Контент Чатов"))
|
self.content_stack.addWidget(QLabel("Контент Чатов"))
|
||||||
self.content_stack.addWidget(QLabel("Контент Профиля"))
|
self.content_stack.addWidget(QLabel("Контент Профиля"))
|
||||||
|
|
||||||
@ -238,7 +239,7 @@ class YobbleHomeView(QWidget):
|
|||||||
self.content_stack.setCurrentIndex(index)
|
self.content_stack.setCurrentIndex(index)
|
||||||
self.update_tab_selection(index)
|
self.update_tab_selection(index)
|
||||||
|
|
||||||
titles = ["Лента", "Поиск", "Чаты", "Лицо"]
|
titles = ["Лента", "Музыка", "Чаты", "Лицо"]
|
||||||
self.title_label.setText(titles[index])
|
self.title_label.setText(titles[index])
|
||||||
|
|
||||||
def update_tab_selection(self, selected_index):
|
def update_tab_selection(self, selected_index):
|
||||||
|
|||||||
Reference in New Issue
Block a user