Skip to content
Centriu
Centriu Helix

Route Guard Decorative Full-Access Automation: A Gate That Checked ID and Waved Everyone Through

Every one of Centriu Helix's 336 internal screens is protected by the same route guard component, and that guard's ENTIRE decision depended on a single shared hook answering one question: which permissions does the current person hold? Before this fix, that hook did not check anything — it returned a hardcoded set containing all 267 permissions the module defines, unconditionally, to any authenticated person, with an internal comment stating plainly that the real, permission-aware version was intended to arrive in a later development phase. Because the SAME hook fed the SAME guard on every single screen, the practical effect was total: an AI kill-switch, LGPD compliance-audit tooling, rollout controls, and sensitive per-client notes were all reachable by any logged-in person, with the guard component visually present and functioning exactly as designed on every page — it simply had nothing real to check against. The fix replaces the hardcoded set with a genuine, server-resolved permission read from the same central identity and access tables Centriu's own "Users and Access" panel already writes to, applies a role-based default policy for the (at-fix-time universal) case of an organization that has never explicitly configured Helix access, and — critically — fails closed on every single exit path: no active session, no active membership, an unrecognized role, or a database query error all now return zero permissions rather than falling back to the previous unconditional grant.
336 screens, one hook, all-yes
Fail-closed on every path
Team collaborating around a table with a laptop
A gate that checked ID, then waved everyone through.

A guard checks against a rulebook — an empty rulebook still lets everyone through

A route guard component that runs on every protected screen looks, from the outside, exactly like a working access-control system: it renders, it consults a permission source, it decides what to show. Whether it actually protects anything depends entirely on what that permission source contains. A guard that consults a genuinely empty or universally-permissive rulebook is not a weaker version of access control — it is the visual appearance of access control with none of its substance, and the two are indistinguishable to anyone reading the screen without inspecting the code behind it.

How the underlying problem shows up before you fix it

A permission-checking hook returns the SAME fixed result — every permission the module defines, granted — regardless of who is asking, what organization they belong to, or whether they are even meant to have elevated access.

A source-code comment explicitly documents the gap as a known, temporary state — a placeholder implementation with a stated intention to connect the real system in a later phase — rather than an accidental oversight nobody noticed.

A single shared hook feeds a route guard placed in front of every protected screen in the module, meaning the SAME gap applies uniformly across the entire surface at once — there is no partial protection to fall back on, because there was never any real check to begin with.

Sensitive administrative surfaces — an automation kill-switch, a compliance-audit trail, deployment or rollout controls, confidential per-client annotations — sit behind the identical, non-functional guard as ordinary, low-sensitivity screens, with no distinction in how either is actually protected.

Testing that only confirms a permission IS granted, without ever confirming a permission is correctly DENIED, cannot detect this class of defect at all — every such test would pass identically whether the guard worked or was completely absent.

Why a documented placeholder is easy to leave in place longer than intended

Building a permission-checking hook ahead of the real, centralized access system it is meant to eventually read from is a reasonable way to unblock UI development without waiting on a larger, cross-cutting piece of infrastructure — and documenting that choice explicitly, with a stated plan for when the real version will land, is good practice compared to leaving the gap silent. The risk is specifically in what a documented, working placeholder looks like from every other vantage point in the meantime: every screen renders correctly, every guard fires, every permission check returns an answer — there is no error, no missing feature, no broken build to notice. The placeholder does its job so convincingly that the very fact it needs replacing can stop being visible to anyone not reading that specific comment, for as long as the surrounding feature work continues to ship successfully around it.

How Centriu Helix replaced an always-yes placeholder with a real, fail-closed check

Centriu Helix's permission-checking hook is consulted by a single route guard component wrapping every one of the module's 336 screens — a deliberately centralized design, meaning exactly one implementation decides access for the entire product surface. Before this fix, that hook's implementation was a hardcoded array containing all 267 permissions the module's type system defines, returned unconditionally alongside an internal flag marking the result as a placeholder — with a code comment stating the real, centrally-managed permission system was intended to be wired in during a later phase of development. Every screen behind the guard, without exception, was reachable by any authenticated person for as long as that placeholder remained the only implementation.

The fix replaces the hardcoded return with a real, server-resolved permission set, read fresh on every request from the same central identity and access tables Centriu's own "Users and Access" administrative panel already writes to — a person's organizational membership record and role, plus any explicit per-user override or per-role organizational baseline recorded in the platform's central permissions table. Because no organization had, at the time of the fix, ever explicitly configured Helix access through that central panel, a role-based default policy was built specifically to govern that universal starting case: an executor role can view a feature and request review of it, but cannot approve changes or initiate a rollout; a sales-oriented role sees only commercial material; a client-facing role cannot operate the product on behalf of the agency serving them; and an unrecognized role receives nothing at all. The policy classifies each of the 267 permissions by matching meaningful terms directly in the permission's own name — sensitive, approve, manage, request, internal, and plain read access — rather than maintaining a separate, hand-curated list that would need updating every time a new permission is added and would silently go stale the moment someone forgot.

That term-matching approach caught a real classification bug of its own during testing: a permission controlling visibility of an automation kill-switch happened to be classified as ordinary read access, because the specific term that should have flagged it as engineering-sensitive did not match broadly enough against that permission's actual name. The matching terms were widened specifically to catch this case, with a dedicated test asserting the exact permission stays correctly restricted going forward. Every exit path through the resolution logic — no active session, no active organizational membership, an unrecognized role, or any database query failure — now returns an empty permission set rather than any form of default grant, and the guard component itself gained a dedicated loading state so that privileged content cannot flash briefly on screen before the real, resolved answer arrives and potentially removes it.

The fix's own verification deliberately measured what gets DENIED rather than only what gets granted — a direct consequence of the original defect being "grants everything," which a grant-only test suite would have continued to pass against even with the fix only partially applied. Run for the first time against real production data, the new check surfaced a genuine, previously invisible configuration gap of its own: the great majority of active members across the organizations using Helix — including, in at least one confirmed case, an organization's own owner — had never actually been granted Helix access in the platform's central access-configuration record at all. The module had functioned for everyone regardless, purely because nothing had ever actually checked. That gap was closed operationally, at the direct request of the affected owner, by explicitly granting access in the specific organizations where they hold an administrative role; every other affected member's record now honestly reflects the access they actually hold, rather than an access state nothing had ever verified.

What is actually built today

Centriu Helix's permission-checking hook resolves a person's real role and access from the same central identity and access tables the platform's own "Users and Access" administrative panel writes to — never from a hardcoded or locally-defined set.

A role-based default policy governs access for the case where an organization has not explicitly configured Helix permissions itself, classifying every permission the module defines by matching meaningful terms in the permission's own name rather than a separately maintained, driftable list.

Every failure path in the permission-resolution logic — no session, no active membership, an unrecognized role, or a database query error — returns zero permissions, replacing the previous unconditional full grant.

The single shared route guard protecting all 336 of the module's screens now gained a dedicated loading state, so privileged content cannot flash on screen before a genuine, resolved permission answer is available.

The permission-checking test suite specifically measures what is correctly DENIED, not only what is correctly granted — a direct, deliberate response to the original defect being an unconditional grant that a grants-only test could never have caught.

Running the real check in production for the first time surfaced, and led to closing, a genuine, previously unmeasured gap where the great majority of active members — including at least one organization's own owner — had never actually held the Helix access their organization's account otherwise implied.

One hook, 336 screens, one gap (illustrative framing of the actual confirmed mechanism)

Before the fix, any person able to log into Centriu at all — regardless of their actual role or organization — could navigate directly to any of Helix's 336 screens, including an automation kill-switch, LGPD audit records, and confidential per-client notes, and the route guard protecting each one would render normally and grant access, because the single hook it consulted always said yes. After the fix, the same navigation attempt is evaluated against the person's real, centrally-recorded role and organization-specific access, with an unrecognized or unconfigured case defaulting to no access at all rather than full access.

What changes operationally

Access to Centriu Helix's 336 screens — including its most sensitive administrative surfaces — now depends on a person's real, centrally-managed role and organization-specific access configuration, evaluated fresh on every request, with every failure mode defaulting to deny. The same fix surfaced and closed a genuine, previously unmeasured access-configuration gap affecting the majority of active members across the organizations using the module.

When this is not the right fit

This automation governs only Centriu Helix's own internal route-level permission checking — it does not change what any individual permission actually allows a person to do once granted, and does not affect the underlying database-level row-level security, which the guard's own documentation explicitly identifies as the real, unconditional access boundary regardless of what this UX-layer guard decides to render.

A documented placeholder vs. a fail-closed real check

A hardcoded, universally-granting placeholder, clearly documented as temporary, is a legitimate way to unblock UI development ahead of a larger permission system landing — its risk is not in existing, but in how invisibly it continues to function once it does. The alternative is not merely "replace the placeholder eventually" but specifically building the eventual real check to fail CLOSED on every path a permission system can fail — an unrecognized role, a missing membership, a database error — so that even an incomplete rollout of the real system (as the universal absence of any organization-configured Helix access demonstrated it would be) defaults to the safer of the two possible wrong answers.

Related systems

Main system: Centriu Helix.

What it does NOT do

  • Does not change what any individual Helix permission actually allows a person to do once correctly granted — this fix corrects only whether the right permissions are resolved and checked in the first place.
  • Does not replace or weaken row-level security at the database layer — the guard's own documentation states plainly that database-level RLS remains the real, unconditional access boundary regardless of this UX-layer check.
  • Does not retroactively identify what any specific person may have viewed or done while the placeholder was in effect — a team with that specific historical concern would need its own separate review of the affected period.
  • Does not change what any individual, already-defined permission is named or what it allows once granted — the fix corrects only how those permissions are resolved and checked for a given person.
  • Does not overlap with this pillar's separate, companion Helix page on default-organization selection — that page covers which of a person's organizations is opened by default; this page covers what a person can do once inside one.

Security and governance

Centriu Helix's route guard now resolves a real, centrally-managed permission set on every request, failing closed on every error path, closing a gap where an undocumented-to-most placeholder had granted every permission in the module to any authenticated person across all 336 protected screens. Organization membership, role and permission-configuration data referenced by this guard remain subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control and audit trails lives at /governanca and /iso.

Pricing and contracting

Available by monthly subscription, with tiered plans. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).

Frequently asked questions

Was this an oversight nobody knew about, or a documented, intentional placeholder?

It was a documented, intentional placeholder — the original code included an explicit comment stating the real, centrally-managed permission check was planned for a later development phase. The gap was in how long that placeholder continued to function unnoticed, not in whether its existence was disclosed in the code.

Did this affect all of Centriu Helix's screens, or only some?

All 336 of the module's screens were affected, because every one of them is protected by the identical shared route guard consulting the same single hook.

How was the fix itself verified to actually deny access correctly?

The test suite was deliberately built to measure what gets DENIED, not only what gets granted — a direct response to the original defect being an unconditional grant, which a grants-only test suite would not have been able to detect even after a partial fix.

What did running the real check in production for the first time reveal?

It surfaced a genuine, previously unmeasured configuration gap: the great majority of active members — including at least one organization's own owner — had never actually been granted Helix access in the platform's central access record, because nothing had ever actually checked before. That gap was closed by explicitly granting the appropriate access and letting every other record honestly reflect the access actually held.

Does this fix change what a specific permission, once granted, allows someone to do?

No — the fix is scoped entirely to correctly resolving and checking WHICH permissions a person holds. It does not change what any individual permission means or unlocks.

What does Centriu Helix cost?

It is sold by subscription with a published starting price — exact current values are on the central pricing page.

See how Centriu Helix enforces real, fail-closed access control

Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.

Sources

  1. Centriu Helix — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Helix — public factsheet (API, JSON) — Centriu, 2026-07-21 · link
  3. Law No. 13,709/2018 — Brazil’s General Data Protection Law (LGPD) — Presidência da República (Brazil), 2018-08-14 · link

Last material update on .

By · AI-assisted production, with human review

We value your privacy

We use cookies to improve your experience, analyze site usage and support our marketing. You can accept all cookies or manage your preferences. To learn more, see our Cookie Policy.