diff --git a/crates/core/src/database/messages.rs b/crates/core/src/database/messages.rs index f4d7d82..65df547 100644 --- a/crates/core/src/database/messages.rs +++ b/crates/core/src/database/messages.rs @@ -1,5 +1,4 @@ use std::collections::HashMap; - use super::*; use crate::cache::Cache; use crate::model::auth::Notification; @@ -273,20 +272,22 @@ impl DataManager { let channel = self.get_channel_by_id(message.channel).await?; // check user permission in community - let membership = self - .get_membership_by_owner_community(user.id, channel.community) - .await?; + if user.id != message.owner { + let membership = self + .get_membership_by_owner_community(user.id, channel.community) + .await?; - if !membership.role.check(CommunityPermission::MANAGE_MESSAGES) - && !user.permissions.check(FinePermission::MANAGE_MESSAGES) - { - return Err(Error::NotAllowed); - } else if user.permissions.check(FinePermission::MANAGE_MESSAGES) { - self.create_audit_log_entry(AuditLogEntry::new( - user.id, - format!("invoked `delete_message` with x value `{id}`"), - )) - .await? + if !membership.role.check(CommunityPermission::MANAGE_MESSAGES) + && !user.permissions.check(FinePermission::MANAGE_MESSAGES) + { + return Err(Error::NotAllowed); + } else if user.permissions.check(FinePermission::MANAGE_MESSAGES) { + self.create_audit_log_entry(AuditLogEntry::new( + user.id, + format!("invoked `delete_message` with x value `{id}`"), + )) + .await? + } } // ...