mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 13:36:59 +00:00
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 {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user