this.statusWebSocket.onmessage = (ev) => {
let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data'])
- // tasks are async so we rely on checking user id
+ // fallback if backend didnt restrict message
if (
statusMessage.owner_id &&
statusMessage.owner_id !== this.settingsService.currentUser?.id &&
def _authenticated(self):
return "user" in self.scope and self.scope["user"].is_authenticated
+ def _is_owner_or_unowned(self, data):
+ return (
+ (
+ self.scope["user"].is_superuser
+ or self.scope["user"].id == data["owner_id"]
+ )
+ if "owner_id" in data and "user" in self.scope
+ else True
+ )
+
def connect(self):
if not self._authenticated():
raise DenyConnection
if not self._authenticated():
self.close()
else:
- self.send(json.dumps(event["data"]))
+ if self._is_owner_or_unowned(event["data"]):
+ self.send(json.dumps(event["data"]))