pub struct DecisionSeams<'a> {
pub scope_policy: &'a dyn ScopePolicy,
pub consent_store: &'a dyn ConsentStore,
pub decisions: &'a dyn DecisionStore,
pub gate: &'a dyn PolicyGate,
pub evaluation_log: &'a EvaluationLog,
pub pds_did: &'a str,
pub pds_hostname: &'a str,
pub loopback_clients: LoopbackClients,
pub client_assertions: &'a ClientAssertionVerifier,
pub issuer: &'a str,
pub permission_sets: &'a PermissionSets,
}Expand description
The seams PAR reaches to work out what it would grant, bundled so
push_authorization_request takes one argument rather than seven.
None of these is PAR’s own: the ceiling is plan/scope-policy.md’s, the
gate is plan/policy.md’s, and the two stores are where the answer goes.
This module calls them in the order below and decides nothing itself.
They are the whole of what judges a sign-in. There is no fourth seam and no second moment — see this module’s own doc. The assertion verifier judges nothing about the grant: it checks that a confidential client is who it says it is.
Fields§
§scope_policy: &'a dyn ScopePolicyThe ceiling this account may ever hold from this client.
consent_store: &'a dyn ConsentStoreWhere the one-time reference an approval carries is minted.
decisions: &'a dyn DecisionStoreWhere the record itself goes.
gate: &'a dyn PolicyGateplan/policy.md’s deny-only gate, asked about the grant.
evaluation_log: &'a EvaluationLogWhere the ceiling’s narrowing or refusal is written down,
payload-free. A policy’s refusal is written by
DecisionSeams::gate itself, so this must be the same log that
gate holds or the two halves of one deployment’s answer land in
different places.
pds_did: &'a strThis deployment’s own DID, for the subject the gate judges.
pds_hostname: &'a strThis deployment’s own hostname, for the same subject.
loopback_clients: LoopbackClientsWhether this deployment fetches a loopback http:// client metadata
document; see crate::oauth::client_metadata::LoopbackClients.
client_assertions: &'a ClientAssertionVerifierWhere a confidential client’s assertion is checked; see
crate::oauth::client_auth.
issuer: &'a strThis deployment’s issuer, which a client assertion’s aud must name.
permission_sets: &'a PermissionSetsWhere an include: scope’s permission set is resolved; see
crate::oauth::permission_set.
Auto Trait Implementations§
impl<'a> Freeze for DecisionSeams<'a>
impl<'a> !RefUnwindSafe for DecisionSeams<'a>
impl<'a> Send for DecisionSeams<'a>
impl<'a> Sync for DecisionSeams<'a>
impl<'a> Unpin for DecisionSeams<'a>
impl<'a> UnsafeUnpin for DecisionSeams<'a>
impl<'a> !UnwindSafe for DecisionSeams<'a>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<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