From 96c9190fa873c854d27531a2bb2c732ccfd16233 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 5 Jul 2021 17:49:30 +0100 Subject: [PATCH] Fix: Allow users with server overlap to access each other. --- set_version.sh | 2 +- src/database/permissions/user.rs | 26 +++++++++++++++++++++++++- src/version.rs | 2 +- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/set_version.sh b/set_version.sh index 89c2a54c..286384cf 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.1-alpha.3 +export version=0.5.1-alpha.4 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/permissions/user.rs b/src/database/permissions/user.rs index 50df7e01..3e0835dc 100644 --- a/src/database/permissions/user.rs +++ b/src/database/permissions/user.rs @@ -69,7 +69,31 @@ impl<'a> PermissionCalculator<'a> { _ => {} } + let check_server_overlap = async || { + let server_ids = self.perspective.fetch_server_ids().await?; + + Ok( + get_collection("server_members") + .find_one( + doc! { + "_id.user": &target, + "_id.server": { + "$in": server_ids + } + }, + None + ) + .await + .map_err(|_| Error::DatabaseError { + operation: "find_one", + with: "server_members", + })? + .is_some() + ) + }; + if self.has_mutual_connection + || check_server_overlap().await? || get_collection("channels") .find_one( doc! { @@ -84,7 +108,7 @@ impl<'a> PermissionCalculator<'a> { ) .await .map_err(|_| Error::DatabaseError { - operation: "find", + operation: "find_one", with: "channels", })? .is_some() diff --git a/src/version.rs b/src/version.rs index ca25382c..08c65e15 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.1-alpha.3"; +pub const VERSION: &str = "0.5.1-alpha.4";