Verify identity once
Login verifies a local bcrypt password or an LDAP and AD bind, then issues a short-lived access token and a single-use refresh token, never a long-lived secret in reversible form.
PMAP capability
Keep every engagement isolated and every grant intentional. PMAP is multi-tenant across 48 backend domains, enforces the tenant boundary on every repository, and controls who sees what with role-based access.
When one platform serves many companies and projects, a single leaky query can cross a boundary it never should. Access has to be enforced everywhere, not just at the front door.
PMAP builds the tenant boundary into the data model itself. Every downstream repository enforces it, so a project-scoped grant never silently opens the owning company, and data stays inside the engagement it belongs to.
Access enforced ad hoc in four different places leaks, drifts, and over-shares. PMAP resolves it from one matrix, scoped in time and tenant, and denies by default.
Authorization resolves from one 10 by 6 matrix, the tenant boundary applies in every domain, and an empty allow-list denies by default rather than returning everything.
PMAP is a multi-tenant platform across 48 backend domains, and every downstream repository enforces the tenant boundary, so isolation is the default rather than an add-on.
Access is granted at the project scope, so a grant never silently opens the owning company and data stays inside the engagement it belongs to.
Role-based access control decides who can see and act on findings, so analysts, owners and viewers each get exactly the access their role needs.
Scanning, asset inventory, analytics, automation and access control share one consistent data model, so governance applies the same way everywhere.
Every request answers three questions in order: who is the principal, what may they do, and which tenant data may they touch, with every credential encrypted or hashed at rest.
Login verifies a local bcrypt password or an LDAP and AD bind, then issues a short-lived access token and a single-use refresh token, never a long-lived secret in reversible form.
When MFA is required, a TOTP challenge gates sign-in. The secret is stored AES-256-GCM encrypted, recovery codes are bcrypt-hashed, and disabling MFA needs fresh proof, not just a bearer token.
Authorization is one matrix of 10 entity types by 6 actions, resolved per request and cached with explicit invalidation, so there is a single place to audit who can do what.
A role is granted at global, company, or project scope with an optional expiry. A project grant never opens the owning company, and a lapsed grant drops from scope within seconds.
Every repository applies a scope filter over the allowed companies. An empty allow-list denies by default rather than returning everything, and cross-tenant access by ID is rejected outright.
An Ed25519-signed license is verified offline against a compiled public key. When it expires or is revoked, writes return 403 while reads stay available, so entitlement cannot be forged or quietly bypassed.
The tenant boundary is enforced in every domain, so data from one company never leaks into another report or query, even on a platform-wide roll-up.
Because every permission resolves from one matrix with scoped, time-bound grants, you can review exactly who can see and act on findings, and stale access expires on its own.
Passwords, recovery codes, and API keys are hashed and TOTP secrets encrypted at rest, so a single database read cannot hand an attacker a working credential.
No plaintext is retained. Passwords and recovery codes are bcrypt-hashed, the TOTP secret is AES-256-GCM encrypted and never serialized, and an API key is kept only as a SHA-256 digest plus prefix. The key plaintext is shown exactly once, at creation.
Single-use rotation. Every refresh atomically swaps the token on the session, so the old one is invalid the instant the real client refreshes once, and access tokens expire in 15 minutes.
The company row is the tenant boundary, applied as a scope predicate on every list, export, and facet. An empty allow-list denies by default, and a project-scoped grant does not open the owning company.
No. The license is signed by an Ed25519 key held outside PMAP, and the verifying public key is compiled into the binary, so it cannot be overridden by an environment variable or file and an attacker cannot substitute one they control.
Walk through tenant isolation, project-scoped grants and role-based access in a working session.