diff --git a/src/Appwrite/Realtime/Realtime.php b/src/Appwrite/Realtime/Realtime.php index 2dd185f933..03cc7ffb6c 100644 --- a/src/Appwrite/Realtime/Realtime.php +++ b/src/Appwrite/Realtime/Realtime.php @@ -25,7 +25,7 @@ class Realtime */ static function getRoles() { - $roles = ['*', 'role:' . ((self::$user->isEmpty()) ? Auth::USER_ROLE_GUEST : Auth::USER_ROLE_MEMBER)]; + $roles = ['role:' . ((self::$user->isEmpty()) ? Auth::USER_ROLE_GUEST : Auth::USER_ROLE_MEMBER)]; if (!(self::$user->isEmpty())) { $roles[] = 'user:' . self::$user->getId(); } @@ -87,7 +87,10 @@ class Realtime foreach ($connection['roles'] as $role) { if (\array_key_exists($role, $subscriptions[$event['project']])) { foreach ($event['data']['channels'] as $channel) { - if (\array_key_exists($channel, $subscriptions[$event['project']][$role]) && \in_array($role, $event['permissions'])) { + if ( + \array_key_exists($channel, $subscriptions[$event['project']][$role]) + && (\in_array($role, $event['permissions']) || \in_array('*', $event['permissions'])) + ) { foreach (array_keys($subscriptions[$event['project']][$role][$channel]) as $ids) { $receivers[] = $ids; } diff --git a/tests/unit/Realtime/RealtimeChannelsTest.php b/tests/unit/Realtime/RealtimeChannelsTest.php index d10a7aa7d2..daa657b04c 100644 --- a/tests/unit/Realtime/RealtimeChannelsTest.php +++ b/tests/unit/Realtime/RealtimeChannelsTest.php @@ -115,11 +115,10 @@ class RealtimeChannelsTest extends TestCase * - XXX users * - XXX teams * - XXX team roles (2 roles per team) - * - 1 * * - 1 role:guest * - 1 role:member */ - $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 3), $this->subscriptions['1']); + $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->subscriptions['1']); /** * Check for connections @@ -131,9 +130,9 @@ class RealtimeChannelsTest extends TestCase Realtime::removeSubscription(-1, $this->subscriptions, $this->connections); $this->assertCount($this->connectionsTotal, $this->connections); - $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 3), $this->subscriptions['1']); + $this->assertCount(($this->connectionsAuthenticated + (3 * $this->connectionsPerChannel) + 2), $this->subscriptions['1']); - for ($i=0; $i < $this->connectionsCount; $i++) { + for ($i = 0; $i < $this->connectionsCount; $i++) { Realtime::removeSubscription($i, $this->subscriptions, $this->connections); $this->assertCount(($this->connectionsCount - $i - 1), $this->connections); diff --git a/tests/unit/Realtime/RealtimeGuestTest.php b/tests/unit/Realtime/RealtimeGuestTest.php index 217ea77fb1..aba7e68454 100644 --- a/tests/unit/Realtime/RealtimeGuestTest.php +++ b/tests/unit/Realtime/RealtimeGuestTest.php @@ -26,8 +26,7 @@ class RealtimeGuestTest extends TestCase ])); $roles = Realtime::getRoles(); - $this->assertCount(2, $roles); - $this->assertContains('*', $roles); + $this->assertCount(1, $roles); $this->assertContains('role:guest', $roles); $channels = [ @@ -205,7 +204,7 @@ class RealtimeGuestTest extends TestCase Realtime::removeSubscription(2, $this->subscriptions, $this->connections); $this->assertCount(1, $this->connections); - $this->assertCount(2, $this->subscriptions['1']); + $this->assertCount(1, $this->subscriptions['1']); Realtime::removeSubscription(1, $this->subscriptions, $this->connections); diff --git a/tests/unit/Realtime/RealtimeTest.php b/tests/unit/Realtime/RealtimeTest.php index 19fd1e74c4..3ff373b9d6 100644 --- a/tests/unit/Realtime/RealtimeTest.php +++ b/tests/unit/Realtime/RealtimeTest.php @@ -42,8 +42,7 @@ class RealtimeTest extends TestCase $roles = Realtime::getRoles(); - $this->assertCount(8, $roles); - $this->assertContains('*', $roles); + $this->assertCount(7, $roles); $this->assertContains('user:123', $roles); $this->assertContains('role:member', $roles); $this->assertContains('team:abc', $roles); @@ -223,7 +222,7 @@ class RealtimeTest extends TestCase Realtime::removeSubscription(2, $this->subscriptions, $this->connections); $this->assertCount(1, $this->connections); - $this->assertCount(8, $this->subscriptions['1']); + $this->assertCount(7, $this->subscriptions['1']); Realtime::removeSubscription(1, $this->subscriptions, $this->connections);