use tonic::Status;
pub(crate) fn analytics_capability_status(
operation: &'static str,
capability_required: &'static str,
message: &'static str,
) -> Status {
crate::runtime::executor_utils::capability_status(
"analytics",
operation,
capability_required,
message,
)
}
pub(crate) fn analytics_internal_status(
operation: impl Into<String>,
message: impl Into<String>,
) -> Status {
crate::runtime::executor_utils::internal_status("analytics", operation, message)
}
pub(crate) fn analytics_required_field(
field: &'static str,
description: &'static str,
message: &'static str,
) -> Status {
crate::runtime::executor_utils::invalid_argument_fields(message, [(field, description)])
}
pub(crate) fn platform_admin_guard(
claim: &crate::runtime::service::method_security::VerifiedClaimContext,
operation: &'static str,
) -> Result<(), Status> {
if claim.is_cross_tenant_admin() {
Ok(())
} else {
Err(crate::runtime::executor_utils::policy_status_with_code(
tonic::Code::PermissionDenied,
operation,
"analytics_platform_admin_required",
"system-global analytics require a platform/cross-tenant admin identity",
))
}
}
pub(crate) fn require_platform_admin(operation: &'static str) -> Result<(), Status> {
if !crate::runtime::service::method_security::claim_context_present() {
return Ok(());
}
let claim = crate::runtime::service::method_security::current_claim_context();
platform_admin_guard(&claim, operation)
}