forked from jmug/stoatchat
feat(livekit): more permission handling
This commit is contained in:
@@ -236,7 +236,7 @@ pub enum EventV1 {
|
||||
UserVoiceStateUpdate {
|
||||
id: String,
|
||||
channel_id: String,
|
||||
data: PartialUserVoiceState
|
||||
data: PartialUserVoiceState,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,11 +32,11 @@ auto_derived_partial!(
|
||||
pub timeout: Option<Timestamp>,
|
||||
|
||||
/// Whether the member is server-wide voice muted
|
||||
#[serde(skip_serializing_if = "if_false")]
|
||||
pub can_publish: bool,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub can_publish: Option<bool>,
|
||||
/// Whether the member is server-wide voice deafened
|
||||
#[serde(skip_serializing_if = "if_false")]
|
||||
pub can_receive: bool,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub can_receive: Option<bool>,
|
||||
},
|
||||
"PartialMember"
|
||||
);
|
||||
@@ -57,6 +57,8 @@ auto_derived!(
|
||||
Avatar,
|
||||
Roles,
|
||||
Timeout,
|
||||
CanReceive,
|
||||
CanPublish,
|
||||
}
|
||||
|
||||
/// Member removal intention
|
||||
@@ -76,8 +78,8 @@ impl Default for Member {
|
||||
avatar: None,
|
||||
roles: vec![],
|
||||
timeout: None,
|
||||
can_publish: false,
|
||||
can_receive: false,
|
||||
can_publish: None,
|
||||
can_receive: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -199,6 +201,8 @@ impl Member {
|
||||
FieldsMember::Nickname => self.nickname = None,
|
||||
FieldsMember::Roles => self.roles.clear(),
|
||||
FieldsMember::Timeout => self.timeout = None,
|
||||
FieldsMember::CanReceive => self.can_receive = None,
|
||||
FieldsMember::CanPublish => self.can_publish = None
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -173,6 +173,8 @@ impl IntoDocumentPath for FieldsMember {
|
||||
FieldsMember::Nickname => "nickname",
|
||||
FieldsMember::Roles => "roles",
|
||||
FieldsMember::Timeout => "timeout",
|
||||
FieldsMember::CanPublish => "can_publish",
|
||||
FieldsMember::CanReceive => "can_receive"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,6 +690,8 @@ impl From<crate::FieldsMember> for FieldsMember {
|
||||
crate::FieldsMember::Nickname => FieldsMember::Nickname,
|
||||
crate::FieldsMember::Roles => FieldsMember::Roles,
|
||||
crate::FieldsMember::Timeout => FieldsMember::Timeout,
|
||||
crate::FieldsMember::CanReceive => FieldsMember::CanReceive,
|
||||
crate::FieldsMember::CanPublish => FieldsMember::CanPublish,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -701,6 +703,8 @@ impl From<FieldsMember> for crate::FieldsMember {
|
||||
FieldsMember::Nickname => crate::FieldsMember::Nickname,
|
||||
FieldsMember::Roles => crate::FieldsMember::Roles,
|
||||
FieldsMember::Timeout => crate::FieldsMember::Timeout,
|
||||
FieldsMember::CanReceive => crate::FieldsMember::CanReceive,
|
||||
FieldsMember::CanPublish => crate::FieldsMember::CanPublish,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,6 +179,22 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
async fn do_we_have_publish_overwrites(&mut self) -> bool {
|
||||
if let Some(member) = &self.member {
|
||||
member.can_publish.unwrap_or(true)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
async fn do_we_have_receive_overwrites(&mut self) -> bool {
|
||||
if let Some(member) = &self.member {
|
||||
member.can_receive.unwrap_or(true)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// * For calculating channel permission
|
||||
|
||||
/// Get the type of the channel
|
||||
|
||||
Reference in New Issue
Block a user