diff --git a/crates/core/permissions/src/impl.rs b/crates/core/permissions/src/impl.rs index 11c378c6..2d424cf6 100644 --- a/crates/core/permissions/src/impl.rs +++ b/crates/core/permissions/src/impl.rs @@ -118,6 +118,10 @@ pub async fn calculate_channel_permissions(query: &mut P) -> permissions.restrict(*ALLOW_IN_TIMEOUT); } + if !permissions.has_channel_permission(ChannelPermission::ViewChannel) { + permissions.revoke_all(); + } + permissions } else { 0_u64.into() diff --git a/crates/core/permissions/src/models/mod.rs b/crates/core/permissions/src/models/mod.rs index ab70b88a..657b9927 100644 --- a/crates/core/permissions/src/models/mod.rs +++ b/crates/core/permissions/src/models/mod.rs @@ -28,6 +28,11 @@ impl PermissionValue { self.0 &= !v; } + /// Revoke all permissions + pub fn revoke_all(&mut self) { + self.0 = 0; + } + /// Restrict to given permissions pub fn restrict(&mut self, v: u64) { self.0 &= v;