pub struct OrganizationContext {
pub org_id: OrgId,
pub principal: Principal,
pub request_id: RequestId,
pub roles: Vec<RoleBinding>,
pub org_path: Vec<OrgId>,
pub attestation: Option<Attestation>,
}Expand description
Platform context bundle — org, principal, request-id, roles, org-path, attestation.
Carries the cross-cutting request context (tenant ID, actor identity,
request tracing ID, authorization roles, org-path, and optional credential) in a
single, cheap-to-clone value. Avoids threading (org_id, principal)
pairs separately through every function and middleware layer.
§Examples
use api_bones::{OrganizationContext, OrgId, Principal, RequestId, Role, RoleBinding, RoleScope, Attestation, AttestationKind};
use uuid::Uuid;
let org_id = OrgId::generate();
let principal = Principal::human(Uuid::new_v4());
let request_id = RequestId::new();
let ctx = OrganizationContext::new(org_id, principal, request_id)
.with_roles(vec![RoleBinding { role: Role::from("admin"), scope: RoleScope::Self_ }])
.with_attestation(Attestation {
kind: AttestationKind::Jwt,
raw: vec![1, 2, 3],
});
assert_eq!(ctx.roles.len(), 1);
assert!(ctx.attestation.is_some());Fields§
§org_id: OrgIdTenant ID
principal: PrincipalActor identity
request_id: RequestIdRequest tracing ID
roles: Vec<RoleBinding>Authorization roles
org_path: Vec<OrgId>Org path from root to the acting org (inclusive). Empty = platform scope.
attestation: Option<Attestation>Optional credential/attestation
Implementations§
Source§impl OrganizationContext
impl OrganizationContext
Sourcepub fn new(org_id: OrgId, principal: Principal, request_id: RequestId) -> Self
pub fn new(org_id: OrgId, principal: Principal, request_id: RequestId) -> Self
Construct a new context with org, principal, and request-id.
Roles default to an empty vec, org_path to empty, attestation to None.
§Examples
use api_bones::{OrganizationContext, OrgId, Principal, RequestId};
use uuid::Uuid;
let ctx = OrganizationContext::new(
OrgId::generate(),
Principal::human(Uuid::new_v4()),
RequestId::new(),
);
assert!(ctx.roles.is_empty());
assert!(ctx.org_path.is_empty());
assert!(ctx.attestation.is_none());Sourcepub fn with_roles(self, roles: Vec<RoleBinding>) -> Self
pub fn with_roles(self, roles: Vec<RoleBinding>) -> Self
Set the roles on this context (builder-style).
§Examples
use api_bones::{OrganizationContext, OrgId, Principal, RequestId, Role, RoleBinding, RoleScope};
use uuid::Uuid;
let ctx = OrganizationContext::new(
OrgId::generate(),
Principal::human(Uuid::new_v4()),
RequestId::new(),
).with_roles(vec![RoleBinding { role: Role::from("editor"), scope: RoleScope::Self_ }]);
assert_eq!(ctx.roles.len(), 1);Sourcepub fn with_org_path(self, org_path: Vec<OrgId>) -> Self
pub fn with_org_path(self, org_path: Vec<OrgId>) -> Self
Set the org path on this context (builder-style).
§Examples
use api_bones::{OrganizationContext, OrgId, Principal, RequestId};
use uuid::Uuid;
let org_id = OrgId::generate();
let ctx = OrganizationContext::new(
org_id,
Principal::human(Uuid::new_v4()),
RequestId::new(),
).with_org_path(vec![org_id]);
assert!(!ctx.org_path.is_empty());Sourcepub fn with_attestation(self, attestation: Attestation) -> Self
pub fn with_attestation(self, attestation: Attestation) -> Self
Set the attestation on this context (builder-style).
§Examples
use api_bones::{OrganizationContext, OrgId, Principal, RequestId, Attestation, AttestationKind};
use uuid::Uuid;
let ctx = OrganizationContext::new(
OrgId::generate(),
Principal::human(Uuid::new_v4()),
RequestId::new(),
).with_attestation(Attestation {
kind: AttestationKind::ApiKey,
raw: vec![42],
});
assert!(ctx.attestation.is_some());Trait Implementations§
Source§impl Clone for OrganizationContext
impl Clone for OrganizationContext
Source§fn clone(&self) -> OrganizationContext
fn clone(&self) -> OrganizationContext
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more