pub enum DenyReason {
UserDeny {
entity: EntityRef,
user_id: UserId,
justification: Option<String>,
},
RoleDeny {
entity: EntityRef,
role: String,
justification: Option<String>,
},
AttributeDeny {
entity: EntityRef,
rule_type: RuleType,
value: String,
justification: Option<String>,
},
NotAssigned {
entity: EntityRef,
user_id: UserId,
roles: Vec<String>,
},
UnknownEntity {
entity: EntityRef,
},
HookUnavailable {
policy: String,
},
PolicyViolation {
policy: String,
detail: Cow<'static, str>,
},
SecretLeak {
pattern_id: SecretPatternId,
pattern_name: Cow<'static, str>,
location: SecretLocation,
},
ScopeViolation {
tool: McpToolName,
required: AccessScope,
},
ToolBlocked {
tool: McpToolName,
list_id: String,
},
RateLimitExceeded {
window: RateLimitWindow,
retry_after_ms: u64,
},
}Expand description
Structured deny rationale.
Variants cover both the user→entity resolver
(UserDeny, RoleDeny, NotAssigned, UnknownEntity),
the hook plane (HookUnavailable), and the tool-use governance chain
(SecretLeak, ScopeViolation, ToolBlocked, RateLimitExceeded). The
human-readable #[error] strings double as the reason column in the
governance_decisions audit row.
Variants§
UserDeny
RoleDeny
AttributeDeny
Denied by a rule on an extension-declared subject dimension. value is
the dimension value the subject holds that the rule named, e.g.
rule_type = "department", value = "engineering".
NotAssigned
UnknownEntity
PolicyViolation
Deny issued by an extension authz hook (via register_authz_hook!
or AppContextBuilder::with_authz_hook). The outer
AuthzDecision::Deny.policy carries the policy identifier
(e.g. "abac.itar"); detail is the human-readable reason.
SecretLeak
ScopeViolation
ToolBlocked
RateLimitExceeded
Trait Implementations§
Source§impl Clone for DenyReason
impl Clone for DenyReason
Source§fn clone(&self) -> DenyReason
fn clone(&self) -> DenyReason
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DenyReason
impl Debug for DenyReason
Source§impl<'de> Deserialize<'de> for DenyReason
impl<'de> Deserialize<'de> for DenyReason
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for DenyReason
impl Display for DenyReason
impl Eq for DenyReason
Source§impl Error for DenyReason
impl Error for DenyReason
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl PartialEq for DenyReason
impl PartialEq for DenyReason
Source§impl Serialize for DenyReason
impl Serialize for DenyReason
impl StructuralPartialEq for DenyReason
Auto Trait Implementations§
impl Freeze for DenyReason
impl RefUnwindSafe for DenyReason
impl Send for DenyReason
impl Sync for DenyReason
impl Unpin for DenyReason
impl UnsafeUnpin for DenyReason
impl UnwindSafe for DenyReason
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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