pub struct PermissionManager {
roles: Arc<RwLock<HashMap<String, Role>>>,
permissions: Arc<RwLock<HashMap<String, Permission>>>,
audit_log: Arc<RwLock<Vec<SecurityEvent>>>,
}Expand description
Permission manager for IPC operations
Fields§
§roles: Arc<RwLock<HashMap<String, Role>>>§permissions: Arc<RwLock<HashMap<String, Permission>>>§audit_log: Arc<RwLock<Vec<SecurityEvent>>>Implementations§
Source§impl PermissionManager
impl PermissionManager
pub fn new() -> Self
Sourcepub async fn validate_permission(
&self,
operation: &str,
context: &SecurityContext,
) -> Result<(), String>
pub async fn validate_permission( &self, operation: &str, context: &SecurityContext, ) -> Result<(), String>
Validate permission for an operation
Sourceasync fn get_required_permissions(&self, operation: &str) -> Vec<String>
async fn get_required_permissions(&self, operation: &str) -> Vec<String>
Get required permissions for an operation
Sourceasync fn get_role_permissions(&self, role_name: &str) -> Vec<String>
async fn get_role_permissions(&self, role_name: &str) -> Vec<String>
Get permissions for a role
Sourcepub async fn log_security_event(&self, event: SecurityEvent)
pub async fn log_security_event(&self, event: SecurityEvent)
Log security event
Sourcepub async fn get_audit_log(&self, limit: usize) -> Vec<SecurityEvent>
pub async fn get_audit_log(&self, limit: usize) -> Vec<SecurityEvent>
Get security audit log
Sourcepub async fn initialize_defaults(&self)
pub async fn initialize_defaults(&self)
Initialize default roles and permissions
Auto Trait Implementations§
impl Freeze for PermissionManager
impl !RefUnwindSafe for PermissionManager
impl Send for PermissionManager
impl Sync for PermissionManager
impl Unpin for PermissionManager
impl !UnwindSafe for PermissionManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].