pub struct GovernanceEngine { /* private fields */ }Expand description
The per-generation compiled governance rules (DW-084): the team_allowlists map plus the audit switch. Built at dataplane refresh from the published config; immutable once built. Stored on the dataplane behind an ArcSwap and swapped on reload, so a governance change applies to the next request with no restart.
Implementations§
Source§impl GovernanceEngine
impl GovernanceEngine
Sourcepub fn compile(cfg: Option<&AiConfig>) -> Self
pub fn compile(cfg: Option<&AiConfig>) -> Self
Compile from the ai: config block’s governance map. Absent
or empty governance yields an empty engine (no allowlists ->
every consumer is unrestricted, fail-open).
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Whether the engine carries any allowlists (cheap dataplane skip — an empty engine allows everything and records nothing).
Sourcepub fn audit(&self) -> bool
pub fn audit(&self) -> bool
Whether to record ALLOWED calls into the audit table (the shadow-audit switch). Denied calls are always recorded when the engine is non-empty.
Sourcepub fn check(
&self,
consumer: Option<&str>,
consumer_policies: &[String],
route_policies: &[String],
service_policies: &[String],
listener_policies: &[String],
global_policies: &[String],
model_alias: &str,
) -> GovernanceVerdict
pub fn check( &self, consumer: Option<&str>, consumer_policies: &[String], route_policies: &[String], service_policies: &[String], listener_policies: &[String], global_policies: &[String], model_alias: &str, ) -> GovernanceVerdict
Check one request’s model alias against the binding allowlists. Walks the frozen precedence chain (consumer > route > service > listener > global) and, for every policy that has an allowlist entry, requires the alias to be in it (deny-wins intersection). A consumer with no binding allowlist policy is allowed (fail-open).
consumer is the authenticated consumer name (None for an
anonymous request — anonymous requests have no consumer-level
policies, so the walk starts at the route level).
Trait Implementations§
Source§impl Clone for GovernanceEngine
impl Clone for GovernanceEngine
Source§fn clone(&self) -> GovernanceEngine
fn clone(&self) -> GovernanceEngine
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GovernanceEngine
impl Debug for GovernanceEngine
Source§impl Default for GovernanceEngine
impl Default for GovernanceEngine
Source§fn default() -> GovernanceEngine
fn default() -> GovernanceEngine
Auto Trait Implementations§
impl Freeze for GovernanceEngine
impl RefUnwindSafe for GovernanceEngine
impl Send for GovernanceEngine
impl Sync for GovernanceEngine
impl Unpin for GovernanceEngine
impl UnwindSafe for GovernanceEngine
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§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>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more