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