Browse Source

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.
Ghostkeeper 2 years ago
parent
commit
f3403ff856
1 changed files with 15 additions and 4 deletions
  1. 15 4
      cura/API/Account.py

+ 15 - 4
cura/API/Account.py

@@ -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}")