privil
This commit is contained in:
parent
66334803ef
commit
730262fe3a
@ -2,7 +2,7 @@ DEBUG = True
|
||||
API_SCHEME = "https"
|
||||
API_HOST = "api.yobble.org"
|
||||
BASE_URL = f"{API_SCHEME}://{API_HOST}"
|
||||
APP_VERSION = "0.1_login_screen_windows"
|
||||
APP_VERSION = "0.2_home_screen"
|
||||
APP_NAME = "yobble messenger"
|
||||
APP_HEADER = f"{APP_NAME}"
|
||||
if DEBUG: APP_HEADER=f"{APP_HEADER} ({APP_VERSION})"
|
||||
|
||||
@ -25,6 +25,7 @@ class YobbleHomeView(QWidget):
|
||||
self.setWindowTitle(f"Yobble Home - {username}")
|
||||
self.setMinimumSize(360, 640)
|
||||
self.permission_cache = set()
|
||||
self.permissions_preloaded = False
|
||||
|
||||
# --- Основной макет ---
|
||||
# Используем QHBoxLayout, чтобы можно было разместить меню и контент рядом
|
||||
@ -240,16 +241,31 @@ class YobbleHomeView(QWidget):
|
||||
return button
|
||||
|
||||
def setup_content_pages(self):
|
||||
self.content_stack.addWidget(QLabel("Контент Ленты"))
|
||||
self.content_stack.addWidget(QLabel("Контент Музыки"))
|
||||
# Лента
|
||||
self.feed_label = QLabel("Загрузка...")
|
||||
self.feed_label.setAlignment(Qt.AlignCenter)
|
||||
self.content_stack.addWidget(self.feed_label)
|
||||
|
||||
# Музыка
|
||||
self.music_label = QLabel("Загрузка...")
|
||||
self.music_label.setAlignment(Qt.AlignCenter)
|
||||
self.content_stack.addWidget(self.music_label)
|
||||
|
||||
# Чаты
|
||||
self.content_stack.addWidget(QLabel("Контент Чатов"))
|
||||
|
||||
# Профиль
|
||||
self.content_stack.addWidget(QLabel("Контент Профиля"))
|
||||
|
||||
def on_tab_button_clicked(self, index):
|
||||
"""Обрабатывает нажатие на кнопку вкладки, проверяя права доступа."""
|
||||
if index in self.REQUIRED_PERMISSIONS:
|
||||
# Запускаем асинхронную проверку в существующем цикле событий
|
||||
asyncio.create_task(self.check_permissions_and_switch(index, self.REQUIRED_PERMISSIONS[index]))
|
||||
# сразу переключаем на вкладку (там уже "Загрузка...")
|
||||
self.switch_tab(index)
|
||||
# запускаем асинхронную проверку
|
||||
asyncio.create_task(
|
||||
self.check_permissions_and_switch(index, self.REQUIRED_PERMISSIONS[index])
|
||||
)
|
||||
else:
|
||||
# Для вкладок без специальных прав доступа
|
||||
self.switch_tab(index)
|
||||
@ -267,6 +283,7 @@ class YobbleHomeView(QWidget):
|
||||
for permission_code in self.REQUIRED_PERMISSIONS.values():
|
||||
if permission_code in user_permissions:
|
||||
self.permission_cache.add(permission_code)
|
||||
self.permissions_preloaded = True
|
||||
print(f"[Permissions] Preloaded. Cache: {self.permission_cache}")
|
||||
else:
|
||||
print(f"[Permissions] Preload failed: {data}")
|
||||
@ -274,9 +291,17 @@ class YobbleHomeView(QWidget):
|
||||
async def check_permissions_and_switch(self, index, permission_code):
|
||||
"""Асинхронно проверяет права и переключает вкладку."""
|
||||
if permission_code in self.permission_cache:
|
||||
self.show_real_content(index)
|
||||
self.switch_tab(index)
|
||||
return
|
||||
|
||||
# Если предзагрузка завершена, но прав в кеше нет → запрет
|
||||
if self.permissions_preloaded:
|
||||
self.show_denied(index)
|
||||
self.switch_tab(index)
|
||||
return
|
||||
|
||||
# Иначе делаем запрос
|
||||
access_token = get_current_access_token()
|
||||
if not access_token:
|
||||
self.show_error_message(localizer.translate("Сессия не найдена. Пожалуйста, войдите снова."))
|
||||
@ -285,12 +310,14 @@ class YobbleHomeView(QWidget):
|
||||
success, data = await get_user_role(access_token)
|
||||
print("data", data)
|
||||
|
||||
success, data = await get_user_role(access_token)
|
||||
if success and permission_code in data.get("user_permissions", []):
|
||||
self.permission_cache.add(permission_code)
|
||||
self.show_real_content(index)
|
||||
self.switch_tab(index)
|
||||
else:
|
||||
error_message = data if not success else localizer.translate("У вас нет прав для доступа к этому разделу.")
|
||||
self.show_error_message(error_message)
|
||||
self.show_denied(index)
|
||||
self.switch_tab(index)
|
||||
|
||||
def switch_tab(self, index):
|
||||
"""Переключает на указанную вкладку."""
|
||||
@ -319,6 +346,26 @@ class YobbleHomeView(QWidget):
|
||||
button.style().unpolish(button)
|
||||
button.style().polish(button)
|
||||
|
||||
def show_real_content(self, index):
|
||||
if index == 0:
|
||||
self.feed_label.setText("Контент Ленты")
|
||||
elif index == 1:
|
||||
self.music_label.setText("Контент Музыки")
|
||||
|
||||
def show_denied(self, index):
|
||||
denied = QLabel("Доступ запрещен")
|
||||
denied.setAlignment(Qt.AlignCenter)
|
||||
denied.setStyleSheet("font-size: 18px; color: #8e8e93;")
|
||||
|
||||
if index == 0:
|
||||
self.content_stack.removeWidget(self.feed_label)
|
||||
self.feed_label = denied
|
||||
self.content_stack.insertWidget(0, denied)
|
||||
elif index == 1:
|
||||
self.content_stack.removeWidget(self.music_label)
|
||||
self.music_label = denied
|
||||
self.content_stack.insertWidget(1, denied)
|
||||
|
||||
def get_stylesheet(self):
|
||||
"""Возвращает QSS стили для компонента в зависимости от темы."""
|
||||
is_dark = theme_manager.is_dark()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user