Permissions: Resolve guild, allows ability to delete channels, delete others messages, etc.

This commit is contained in:
Paul
2021-06-02 12:35:01 +01:00
parent 1713ad057d
commit 812fa2a98f
3 changed files with 17 additions and 3 deletions

View File

@@ -40,7 +40,7 @@ impl<'a> PermissionCalculator<'a> {
match channel {
Channel::SavedMessages { user: owner, .. } => {
if &self.perspective.id == owner {
Ok(u32::MAX - ChannelPermission::VoiceCall as u32)
Ok(u32::MAX)
} else {
Ok(0)
}
@@ -81,8 +81,14 @@ impl<'a> PermissionCalculator<'a> {
Ok(0)
}
}
Channel::TextChannel { .. } => {
Ok(ChannelPermission::View + ChannelPermission::SendMessage)
Channel::TextChannel { server, .. } => {
let server = Server::get(server).await?;
if self.perspective.id == server.owner {
Ok(u32::MAX)
} else {
Ok(ChannelPermission::View + ChannelPermission::SendMessage)
}
}
}
}

View File

@@ -17,6 +17,12 @@ pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
}
let target = target.fetch_channel().await?;
match target {
Channel::SavedMessages { .. }
| Channel::TextChannel { .. } => return Err(Error::CannotJoinCall),
_ => {}
}
let perm = permissions::PermissionCalculator::new(&user)
.with_channel(&target)
.for_channel()

View File

@@ -27,6 +27,7 @@ pub enum Error {
UnknownChannel,
UnknownAttachment,
CannotEditMessage,
CannotJoinCall,
EmptyMessage,
CannotRemoveYourself,
GroupTooLarge {
@@ -77,6 +78,7 @@ impl<'r> Responder<'r, 'static> for Error {
Error::UnknownChannel => Status::NotFound,
Error::UnknownAttachment => Status::BadRequest,
Error::CannotEditMessage => Status::Forbidden,
Error::CannotJoinCall => Status::BadRequest,
Error::EmptyMessage => Status::UnprocessableEntity,
Error::CannotRemoveYourself => Status::BadRequest,
Error::GroupTooLarge { .. } => Status::Forbidden,