privil
This commit is contained in:
parent
36bfa31099
commit
66334803ef
@ -4,6 +4,7 @@ from app.ui.views.yobble_home_view import YobbleHomeView # <--- Изменено
|
||||
from typing import Optional
|
||||
from threading import Thread
|
||||
import time # эмуляция задержки от сервера
|
||||
import asyncio
|
||||
from app.core.database import get_last_login, get_session, set_last_login
|
||||
|
||||
class MainController(QStackedWidget):
|
||||
@ -50,7 +51,19 @@ class MainController(QStackedWidget):
|
||||
Thread(target=self.update_data_from_server, args=(username,), daemon=True).start()
|
||||
|
||||
def update_data_from_server(self, username: str):
|
||||
"""
|
||||
В фоновом режиме обновляет данные с сервера.
|
||||
Эмулирует задержку и предзагружает права доступа.
|
||||
"""
|
||||
# Эмуляция запроса
|
||||
time.sleep(2)
|
||||
print(f"[Sync] Обновляем данные для пользователя: {username}")
|
||||
# Здесь будет логика обновления данных для YobbleHome
|
||||
|
||||
if self.yobble_home_view:
|
||||
print("[Sync] Запускаем предзагрузку прав доступа...")
|
||||
try:
|
||||
# Запускаем асинхронную функцию в текущем потоке
|
||||
asyncio.run(self.yobble_home_view.preload_permissions())
|
||||
print("[Sync] Предзагрузка прав доступа завершена.")
|
||||
except Exception as e:
|
||||
print(f"[Sync] Ошибка во время предзагрузки прав: {e}")
|
||||
|
||||
@ -137,7 +137,7 @@ class LoginView(QWidget):
|
||||
|
||||
self.login_button = QPushButton(localizer.translate("Войти"))
|
||||
self.login_button.setFixedHeight(40)
|
||||
self.login_button.clicked.connect(self.handle_login)
|
||||
self.login_button.clicked.connect(self._handle_login_click)
|
||||
|
||||
self.register_switch = QPushButton(localizer.translate("Нет аккаунта? Регистрация"))
|
||||
self.register_switch.setFlat(True)
|
||||
@ -161,7 +161,7 @@ class LoginView(QWidget):
|
||||
|
||||
self.register_button = QPushButton(localizer.translate("Зарегистрироваться"))
|
||||
self.register_button.setFixedHeight(40)
|
||||
self.register_button.clicked.connect(self.handle_register)
|
||||
self.register_button.clicked.connect(self._handle_register_click)
|
||||
|
||||
self.login_switch = QPushButton(localizer.translate("Уже есть аккаунт? Войти"))
|
||||
self.login_switch.setFlat(True)
|
||||
@ -245,7 +245,11 @@ class LoginView(QWidget):
|
||||
if child.widget():
|
||||
child.widget().setParent(None)
|
||||
|
||||
def handle_login(self):
|
||||
def _handle_login_click(self):
|
||||
"""Синхронный обработчик для сигнала нажатия кнопки."""
|
||||
asyncio.create_task(self.handle_login())
|
||||
|
||||
async def handle_login(self):
|
||||
login = self.login_input.text()
|
||||
password = self.password_input.text()
|
||||
|
||||
@ -264,7 +268,7 @@ class LoginView(QWidget):
|
||||
|
||||
try:
|
||||
# Запускаем асинхронную функцию
|
||||
success, message = asyncio.run(auth_service.login(login, password))
|
||||
success, message = await auth_service.login(login, password)
|
||||
|
||||
if success:
|
||||
self.on_login(login)
|
||||
@ -277,12 +281,16 @@ class LoginView(QWidget):
|
||||
self.login_button.setText(localizer.translate("Войти"))
|
||||
|
||||
|
||||
def _handle_register_click(self):
|
||||
"""Синхронный обработчик для сигнала нажатия кнопки."""
|
||||
asyncio.create_task(self.handle_register())
|
||||
|
||||
def validate_confirm_password(self, text):
|
||||
if text != self.reg_password_input.text():
|
||||
return False, localizer.translate("Пароли не совпадают")
|
||||
return True, ""
|
||||
|
||||
def handle_register(self):
|
||||
async def handle_register(self):
|
||||
# Принудительная валидация всех полей
|
||||
self.reg_login_input.on_text_changed(self.reg_login_input.text())
|
||||
self.reg_password_input.on_text_changed(self.reg_password_input.text())
|
||||
@ -308,7 +316,7 @@ class LoginView(QWidget):
|
||||
self.register_button.setText(localizer.translate("Регистрация..."))
|
||||
|
||||
try:
|
||||
success, message = asyncio.run(auth_service.register(login, password, invite))
|
||||
success, message = await auth_service.register(login, password, invite)
|
||||
|
||||
if success:
|
||||
QMessageBox.information(self, localizer.translate("Успех"), message)
|
||||
|
||||
@ -14,6 +14,11 @@ from app.core.database import get_current_access_token
|
||||
from app.core.localizer import localizer
|
||||
|
||||
class YobbleHomeView(QWidget):
|
||||
REQUIRED_PERMISSIONS = {
|
||||
0: "post.access", # Лента
|
||||
1: "music.access" # Музыка
|
||||
}
|
||||
|
||||
def __init__(self, username: str):
|
||||
super().__init__()
|
||||
self.username = username
|
||||
@ -242,19 +247,30 @@ class YobbleHomeView(QWidget):
|
||||
|
||||
def on_tab_button_clicked(self, index):
|
||||
"""Обрабатывает нажатие на кнопку вкладки, проверяя права доступа."""
|
||||
|
||||
required_permissions = {
|
||||
0: "post.access", # Лента
|
||||
1: "music.access" # Музыка
|
||||
}
|
||||
|
||||
if index in required_permissions:
|
||||
if index in self.REQUIRED_PERMISSIONS:
|
||||
# Запускаем асинхронную проверку в существующем цикле событий
|
||||
asyncio.create_task(self.check_permissions_and_switch(index, required_permissions[index]))
|
||||
asyncio.create_task(self.check_permissions_and_switch(index, self.REQUIRED_PERMISSIONS[index]))
|
||||
else:
|
||||
# Для вкладок без специальных прав доступа
|
||||
self.switch_tab(index)
|
||||
|
||||
async def preload_permissions(self):
|
||||
"""Асинхронно предзагружает права доступа без UI."""
|
||||
access_token = get_current_access_token()
|
||||
if not access_token:
|
||||
print("[Permissions] Preload failed: No access token.")
|
||||
return
|
||||
|
||||
success, data = await get_user_role(access_token)
|
||||
if success:
|
||||
user_permissions = data.get("user_permissions", [])
|
||||
for permission_code in self.REQUIRED_PERMISSIONS.values():
|
||||
if permission_code in user_permissions:
|
||||
self.permission_cache.add(permission_code)
|
||||
print(f"[Permissions] Preloaded. Cache: {self.permission_cache}")
|
||||
else:
|
||||
print(f"[Permissions] Preload failed: {data}")
|
||||
|
||||
async def check_permissions_and_switch(self, index, permission_code):
|
||||
"""Асинхронно проверяет права и переключает вкладку."""
|
||||
if permission_code in self.permission_cache:
|
||||
|
||||
Reference in New Issue
Block a user