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 { match channel {
Channel::SavedMessages { user: owner, .. } => { Channel::SavedMessages { user: owner, .. } => {
if &self.perspective.id == owner { if &self.perspective.id == owner {
Ok(u32::MAX - ChannelPermission::VoiceCall as u32) Ok(u32::MAX)
} else { } else {
Ok(0) Ok(0)
} }
@@ -81,8 +81,14 @@ impl<'a> PermissionCalculator<'a> {
Ok(0) Ok(0)
} }
} }
Channel::TextChannel { .. } => { Channel::TextChannel { server, .. } => {
Ok(ChannelPermission::View + ChannelPermission::SendMessage) 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?; let target = target.fetch_channel().await?;
match target {
Channel::SavedMessages { .. }
| Channel::TextChannel { .. } => return Err(Error::CannotJoinCall),
_ => {}
}
let perm = permissions::PermissionCalculator::new(&user) let perm = permissions::PermissionCalculator::new(&user)
.with_channel(&target) .with_channel(&target)
.for_channel() .for_channel()

View File

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