use crate::{
dds::qos::QosPolicies,
discovery::{sedp_messages::TopicBuiltinTopicData, SpdpDiscoveredParticipantData},
security::{authentication::*, *},
};
use super::*;
pub trait AccessControl:
ParticipantAccessControl + LocalEntityAccessControl + RemoteEntityAccessControl
{
}
pub trait ParticipantAccessControl: Send {
fn validate_local_permissions(
&mut self,
auth_plugin: &dyn Authentication,
identity: IdentityHandle,
domain_id: u16,
participant_qos: &QosPolicies,
) -> SecurityResult<PermissionsHandle>;
fn validate_remote_permissions(
&mut self,
auth_plugin: &dyn Authentication,
local_identity_handle: IdentityHandle,
remote_identity_handle: IdentityHandle,
remote_permissions_token: &PermissionsToken,
remote_credential_token: &AuthenticatedPeerCredentialToken,
) -> SecurityResult<PermissionsHandle>;
fn check_create_participant(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
qos: &QosPolicies,
) -> SecurityResult<bool>;
fn check_remote_participant(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
participant_data: Option<&SpdpDiscoveredParticipantData>,
) -> SecurityResult<bool>;
fn get_permissions_token(&self, handle: PermissionsHandle) -> SecurityResult<PermissionsToken>;
fn get_permissions_credential_token(
&self,
handle: PermissionsHandle,
) -> SecurityResult<PermissionsCredentialToken>;
fn set_listener(&self) -> SecurityResult<()>;
fn get_participant_sec_attributes(
&self,
permissions_handle: PermissionsHandle,
) -> SecurityResult<ParticipantSecurityAttributes>;
}
pub trait LocalEntityAccessControl: Send {
fn check_create_datawriter(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
topic_name: String,
qos: &QosPolicies,
) -> SecurityResult<bool>;
fn check_create_datareader(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
topic_name: String,
qos: &QosPolicies,
) -> SecurityResult<bool>;
fn check_create_topic(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
topic_name: String,
qos: &QosPolicies,
) -> SecurityResult<bool>;
fn get_topic_sec_attributes(
&self,
permissions_handle: PermissionsHandle,
topic_name: &str,
) -> SecurityResult<TopicSecurityAttributes>;
fn get_datawriter_sec_attributes(
&self,
permissions_handle: PermissionsHandle,
topic_name: String,
) -> SecurityResult<EndpointSecurityAttributes>;
fn get_datareader_sec_attributes(
&self,
permissions_handle: PermissionsHandle,
topic_name: String,
) -> SecurityResult<EndpointSecurityAttributes>;
}
pub trait RemoteEntityAccessControl: Send {
fn check_remote_datawriter(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
publication_data: &PublicationBuiltinTopicDataSecure,
) -> SecurityResult<bool>;
fn check_remote_datareader(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
subscription_data: &SubscriptionBuiltinTopicDataSecure,
) -> SecurityResult<(bool, bool)>;
fn check_remote_topic(
&self,
permissions_handle: PermissionsHandle,
domain_id: u16,
topic_data: &TopicBuiltinTopicData,
) -> SecurityResult<bool>;
}