Security you can actually review

Who can see what, how sign-in is protected, what’s recorded, and exactly what is and isn’t collected, written so your IT team can check it.

The Roles and Access console on a desktop. Four tiles count roles, people assigned, system roles and installed industry packs. A row of category filters sits above six role cards. Owner, Admin and Staff are badged System and footnoted System role, protected. HR Manager, Payroll Officer and Ward Manager are badged Custom and footnoted Editable. Every card carries its own view, update and manage counts.

Give each person only the access their role needs.

Owner, Admin and Staff come built in. Add your own roles or install ready-made ones, and limit each permission to a person’s own records, their team, department or site, or the whole company. Sensitive permissions are flagged before you save.

The people a role gets assigned to
What a role actually holds
  • SelfTheir own records
  • TeamTheir team
  • DepartmentTheir department
  • LocationTheir site
  • OrganizationThe whole workspace
  • CustomA filter you define
Every key sorts into one ofBasic · View · Approval · Data · Settings · Admin · Work
Ready to install19 business roles · 10 industry packs · 45 roles across those packs
The six scope types, the seven buckets and the shipped role library exactly as built.
Three in the box, the rest are yours

Owner, Admin and Staff are the system roles a workspace starts with. All three are marked protected and none can be archived. Every other role is one you create, duplicate or install from an industry pack, and those stay editable.

Scoped, not just granted

A permission is not simply on or off. It carries a scope, so the same key can mean their own records, their team, their site or the whole workspace. The scope travels with the permission into the query that reads the data.

The heavy keys are flagged before you save

The editor previews the effective result as you change it: what the role really holds once inheritance is resolved, and which keys count as sensitive. Anything ending in manage or delete, and anything touching billing, payroll, accounting or settings, does. Roles and Access is owner only.

Every request is checked before anything happens.

Almost every action in StaffIntra is tied to a named permission, checked before it runs: 807 rules over 978 permissions, generated from the product itself so a rule can’t drift from what it protects. Refusals are recorded with the reason, and the 45 exceptions are listed by name in one place.

How the workspace fits together
One map, 807 rules
372GET252POST78DELETE53PUT52PATCH
Drawn from528 source files, grouped into 190 features
Distinct permission keys978
Exempt by name45 path prefixes, listed in one file
Counted from the generated permission registry, not estimated.
One key per route, generated not typed

The map is built from the routes themselves rather than kept by hand, so a route and its rule cannot drift apart. Reads are the bulk of it at 372 of the 807, writes account for 252 and deletes for 78.

A refusal is a record

When the answer is no, StaffIntra writes an access denied row carrying the endpoint, the method, the permission key it needed, which layer refused, the reason and the roles held at the time. A denial you can read afterward beats one that only produced a red toast.

The exceptions are a list, not a habit

Forty five path prefixes short circuit the check, all named in one file. Some run before a session exists: sign-in, signup, workspace lookup, the payment webhook and the two-factor routes. The rest are module endpoints, attendance and payroll among them, that authorize inside the handler.

More than a password stands between a leaver and the payroll screen.

Two-factor sign-in is checked on every request, not just at the login form, and it’s tied to that exact sign-in session. Clock-in terminals sign everything they send, and connected accounts’ tokens are encrypted.

Where a verified punch ends up
How each thing proves what it is
  • A person signing inSix digit code
  • A clock-in terminalSigned request body
  • A connected accountEncrypted token
Turning a code onScan the QR code or type the key by hand. The new secret waits in a ten minute cookie and only replaces the old one once a code verifies.
When somebody loses their phoneAn admin in the same workspace resets them. The reset clears the secret, never reveals it, forces enrollment again and lands in the audit log.
Sign-in, terminal and integration proofs as shipped. There are no backup codes.
Checked on every request, not once at the door

The verification cookie has to name the current sign-in session, so one carried over from a previous session does not pass. Platform level administrators get 48 hours from the day their account is created to finish enrolling, counted down in a banner in the product.

A terminal signs everything it sends

A terminal, or an on-prem bridge relaying for hardware that cannot reach HTTPS itself, posts to an endpoint belonging to that one device and signs every punch with a 32 byte secret issued at registration and returned once. A bad signature is refused. An unmatched punch is logged unmapped rather than attributed to somebody.

Four things connect, and their tokens are encrypted

Google Workspace connects per employee. Slack, QuickBooks Online and GitHub connect once for the whole workspace. Every stored token is encrypted at rest with AES-256-GCM under a key the application never writes to the database.

Six weeks later, nobody can say who changed it

Every notable action writes a row: what happened, who did it, in which workspace, the details, the IP address and the time. Fifty four action names are defined and the activity feed reads them back as sentences. An action the feed has no wording for still appears as a row rather than disappearing, which is the difference between a log that is incomplete and one that is misleading.

Who can see a case, and who can act on it
The Activity feed open on a tablet: eleven rows of workspace actions, each with an icon, a plain language line and how long ago it happened, including one row for an action the feed has no specific wording for
Scoped by whoever is reading it

Every read is pinned to your workspace first. A reader who does not hold audit view all, audit manage, settings view or settings manage sees only their own rows, so the same feed means one thing to an owner and something narrower to everybody else.

Paged, never truncated

Thirty rows at a time, so nothing shifts underneath you, and no single request hands back more than a hundred however it is asked.

Clearing is a view, not a delete

The clear control writes a marker in that one browser and hides everything older than it. The rows are untouched and the marker lifts again from the same screen. A record you can quietly erase is not a record.

What it is allowed to watch, and what it is not

Activity tracking can show which applications and website domains a person used, and how much of the day was active. What it captures beyond that is a decision you make, and the intrusive parts are off until you turn them on. Full page URLs and window titles both default to off, because either can carry a search term, a document name or an email subject. Some things are never collected at all: keystrokes, passwords, the clipboard, microphone, camera, screenshots or screen recordings, and the contents of messages and documents.

See how hours are recorded
Collected, by default
OnApplication in the foreground, and for how long · website domain · active and idle time
Off until you enable itFull page URL, not just the domain · window and browser tab titles
Off entirelyActivity tracking can be disabled for the workspace
As configured at Settings, Activity and Privacy.
Collecting and judging are two screens

What the product may collect is configured in one place, and how that activity is scored in another. Deciding to measure something is a different decision from deciding what it means, and one screen encourages one person to make both at once.

A person signs off every assessment

A score is proposed by the system, then confirmed, changed or rejected by a manager who records why when they disagree. Nothing lands on a person's record because software decided it and nobody looked.

Unclassified is a gap, not a verdict

Activity nobody has categorized yet is reported as a data-quality gap, not counted against the person. A tool that reads "we have not looked at this yet" as "unproductive" punishes its own configuration backlog.

AI with clear boundaries

Every workspace connects its own AI provider, under the contract and the data terms you have already signed. Provider credentials belong to the workspace and are never stored at platform level, so there is no shared pool of customer keys here to leak. With no provider configured there are no AI calls at all, and the rest of the workspace is unaffected.

What your company AI answers from
Whose model, whose key
  • The modelYour provider, your account
  • The keyHeld by the workspace, never platform-wide
  • No providerNo calls, and nothing else changes
As configured at Settings, AI Infrastructure. A new workspace has no provider.
Your provider, your account

OpenAI, Anthropic, Gemini or any OpenAI-compatible endpoint you already run, including one you host yourself. Not a model choice somebody else negotiated on your behalf.

We never hold the key

Credentials sit with the tenant, never platform-wide. Usage is visible per workspace, and the per-call log names the provider, the model and the outcome.

Connect nothing and nothing runs

If your security review ends with "no AI for now", that is a supported configuration rather than a workaround. Disable a provider and the assistant stops using it.

Know what leaves the building

"Answers from your workspace, not the open internet" describes where the content of an answer comes from: your own policies, documents and records, never a crawl of the public web. It is not a claim that nothing is sent anywhere. If you connect a hosted provider, that provider composes the answer, under the agreement you hold with them. If that is not acceptable, connect an endpoint you run yourself, or connect none at all.

Have a security question?

Bring the review with you. Everything on this page was counted from the product.