Security & access
Controls that exist today, described plainly
A shared platform running rival federations on the same infrastructure has to be specific about isolation. Everything below is a mechanism in the running product — nothing here is aspirational.
Roles
14, capability-based
Failure mode
Deny on error
Audit
Org-scoped log
Controls
How access is actually decided
Tenant isolation
01Organizations and clubs scope users, matches, athletes, entries, and certificates. A request for another organization's record returns 403, not an empty result — the difference matters when you are sharing a platform with a rival federation.
Enforced at the API layer, not the UI
Role-based access with overrides
02Fourteen roles with defined capabilities, plus per-organization overrides so a federation can tighten or loosen one role without a code change. Master admin is the only role that can mint another master.
roles.js capabilities + org overrides
Assignment-gated scoring
03Being able to open a pad is not permission to score. Corner scoring is authorised against the current assignment every time an official joins, and the socket layer fails closed if it cannot verify.
authorize-scoring on every join
Plan gates that fail closed
04Suspended and expired plans block login and authenticated APIs for that organization. If the gate check itself errors, access is denied rather than assumed.
Deny on error, not allow
Audit trail
05Sensitive operations — official assignments, user changes, offline payment marking — are written to an organization-scoped audit log that admins and auditors can read.
Org-scoped, readable by auditor role
Signed outbound webhooks
06Entry, payment, and bout events post to your endpoint with a signed payload and timing-safe verification, so you can trust what you receive and dry-run before going live.
HMAC with timing-safe compare
Session and credential handling
07JWT in an HTTP-only cookie, tenant login at your own URL, invite-based password setting, and email-based password help where SMTP is configured.
HTTP-only cookie sessions
Public surface rate limiting
08Registration, athlete lookup, support intake, and public boards are rate limited so a published link cannot be used to enumerate your roster or spam your inbox.
Applied to unauthenticated routes
Access control
Everyone sees exactly their job
A punch official should not be able to open the billing console, and a coach should not be able to edit another club's roster. This matrix is generated from the product's own capability definitions.
| Role | Orgs | Users | Branding | Athletes | Events | Brackets | Matches | Audit |
|---|---|---|---|---|---|---|---|---|
| Platform mastermaster_adminAll organizations | Allowed | Allowed | Allowed | Allowed | Allowed | Allowed | Allowed | Allowed |
| Federation adminorganization_adminOne organization | Not allowed | Allowed | Allowed | Allowed | Allowed | Allowed | Allowed | Allowed |
| Game admingame_adminOrganization events | Not allowed | Not allowed | Not allowed | Allowed | Allowed | Allowed | Allowed | Not allowed |
| Fight adminfight_adminMatch operations | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Allowed | Not allowed |
| Club ownerclub_ownerOne club | Not allowed | Not allowed | Not allowed | Allowed | Allowed | Not allowed | Not allowed | Not allowed |
| CoachcoachClub athletes | Not allowed | Not allowed | Not allowed | Allowed | Allowed | Not allowed | Not allowed | Not allowed |
| Head officialhead_refereeAssigned bouts | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Allowed | Not allowed |
| RefereerefereeAssigned bouts | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Allowed | Not allowed |
| AuditorauditorRead-only | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed |
| Punch officials 1–4punch_1…punch_4Own punch slot | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed |
Organization isolation
Users, matches, athletes, and certificates are scoped to an organization. A cross-tenant request returns 403 rather than an empty list.
Per-org overrides
A federation can tighten or loosen a capability for one role without a code change, and the override is applied on top of these defaults.
Audit trail
Sensitive operations — assignments, user changes, payment marking — are written to an organization-scoped audit log.
Straight answers
What we will not claim
Procurement conversations go faster when the gaps are on the table first.
- We do not display compliance badges we have not earned. There is no SOC 2 or ISO certification to claim today.
- Razorpay, SMTP, Sentry, Redis, and object storage are configured per deployment. The status page reports what is actually enabled rather than showing green by default.
- SMS and WhatsApp notification channels exist as an outbox with provider stubs. When they are unconfigured the product reports skipped sends instead of failing silently.
- Penetration test reports and a security questionnaire response are available on request during procurement.
Send us your security questionnaire
We will answer it against the running product rather than a template, and flag anything that is configuration rather than a guarantee.
- Walk through a live bout on your own sport
- See the control room with your mat layout
- Review tenancy, roles, and audit before you commit