Add property to get the list of permissions for the user

The QML code can read this list and see if certain keys are in the list.

Contributes to issue CURA-9220.
This commit is contained in:
Ghostkeeper 2022-07-25 15:57:51 +02:00
parent c529f2b31a
commit f3403ff856
No known key found for this signature in database
GPG key ID: FFBC62A75981ED70

View file

@ -5,7 +5,7 @@ from datetime import datetime
import json
from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty, QTimer, pyqtEnum
from PyQt6.QtNetwork import QNetworkRequest
from typing import Any, Callable, Dict, Optional, Set, TYPE_CHECKING
from typing import Any, Callable, Dict, List, Optional, TYPE_CHECKING
from UM.Logger import Logger
from UM.Message import Message
@ -84,7 +84,7 @@ class Account(QObject):
self._logged_in = False
self._user_profile: Optional[UserProfile] = None
self._additional_rights: Dict[str, Any] = {}
self._permissions: Set[str] = set() # Set of account permission keys, e.g. {"digital-factory.print-job.write"}
self._permissions: List[str] = [] # List of account permission keys, e.g. ["digital-factory.print-job.write"]
self._sync_state = SyncState.IDLE
self._manual_sync_enabled = False
self._update_packages_enabled = False
@ -330,9 +330,17 @@ class Account(QObject):
"""A dictionary which can be queried for additional account rights."""
return self._additional_rights
permissionsChanged = pyqtSignal()
@pyqtProperty("QVariantList", notify = permissionsChanged)
def permissions(self) -> List[str]:
"""
The permission keys that the user has in his account.
"""
return self._permissions
def _updatePermissions(self) -> None:
"""
Update the set of permissions that the user has.
Update the list of permissions that the user has.
"""
def callback(reply: "QNetworkReply"):
status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
@ -353,7 +361,10 @@ class Account(QObject):
return
if "data" in reply_data and "permissions" in reply_data["data"]:
self._permissions = set(reply_data["data"]["permissions"])
permissions = sorted(reply_data["data"]["permissions"])
if permissions != self._permissions:
self._permissions = permissions
self.permissionsChanged.emit()
def error_callback(reply: "QNetworkReply", error: "QNetworkReply.NetworkError"):
Logger.error(f"Request for user permissions list failed. Network error: {error}")