Security & Privacy

Access control inside GovIntel

Three internal roles with different powers, where the fields that authorize an assessment are restricted to one of them by design.

Currentengine 9.0.0Verified 2026-08-30

Three roles

RoleCan
ViewerRead engagement and enquiry records
OperatorThe above, plus editing working state on an engagement
AdminThe above, plus credentials, access and payment status, dispatching an assessment, and issuing delivery links

Every authenticated request is checked against these.

What is restricted to admin, and why

The fields that unlock an assessment — the role identifier, the cloud identifiers, the access status and the payment status — are admin-only wherever they appear, and the restriction is enforced on the request body rather than by route.

An operator therefore cannot mark an engagement authorized and paid and then run it. Approval and execution both sit with admin.

Why this exists

Before roles existed, any account in the system could read every customer's role identifier, edit any engagement, and dispatch an assessment against any customer's AWS account.

Accounts predating roles cannot sign in

An account with no role is refused. It is not defaulted to the lowest role, because a silent default is how a dormant account becomes an active one nobody reviewed.

Customers are a separate audience entirely

Customers have no GovIntel login and never will. The customer surface is a separate router with its own guard, and nothing there shares middleware with the internal API.

A customer session cannot name an engagement, see anything commercial, write any field, reach a connected state, or dispatch an assessment.

Known limitation

The internal console's route guard is enforced by the backend on every request. GovIntel's own security documentation records that the client-side guard alone would not be sufficient, and that the backend authorization is what makes it safe.