Permissions: Resolve guild, allows ability to delete channels, delete others messages, etc.
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user