Ledgr/Documentation/Roles & users

Roles, users & security

Who can see what, who approved what, and how to prove it later.

The roles that ship

Eight on every plan, and three more that appear where the plan carries the modules they are for. All of them are a starting point — every one can be copied and changed.

RoleIntended for
OwnerThe person who owns the business. Full access, including billing and deleting the account.
AdminDay-to-day administration including user management.
AccountantFull financial access — posting, reporting, reconciliation — without user administration.
SalesQuotes, invoices, customers and the full sales CRM. No access to payroll or the ledger.
ViewerRead-only across what they are given.
Payroll ManagerEmployees, runs, payslips and leave. No access to sales or banking.
Tax PractitionerFull SARS access, view and export on financials, can create reports.
External AuditorRead and export, with no ability to change anything.
BuyerRequisitions, purchase orders, suppliers and the three-way match. Manufacturing plans.
Production PlannerBills of materials, material planning and production. Sees despatch, does not dispatch.
Fleet ControllerTrips, vehicles, drivers and proof of delivery. Manufacturing plans.
The last three are not added to businesses that already exist.

A new system role appearing in an established account is a permission change nobody asked for. If you upgraded into a plan that has them and want them, create them from the role builder — the definitions are there, they are simply not applied behind your back.

The permission matrix

Each role holds up to six permissions on each of the modules:

  • view — open the module and read its data
  • create — add new records
  • edit — change existing records
  • delete — remove or void records
  • approve — sign off items in a queue, such as expense claims or a payroll run
  • export — take the data out as PDF, Excel or CSV

The matrix view shows modules down the side and roles across the top, so you can see the whole policy at once. If none of the eight fit, build a custom role and tick the permissions yourself.

Approve is separate from edit on purpose.

Someone who can capture an expense should not automatically be able to approve it. Keeping the two apart is the cheapest internal control you have.

Inviting a user

  1. Roles & Users → Invite user
  2. Email address and role

    They receive an invitation and set their own password. You never handle it.

  3. Entity access

    On multi-company accounts, choose which entities they can reach. Access is per entity, not all-or-nothing.

  4. Check the seat count

    Seats are limited by plan — 1 on Free, 3 on Starter, 10 on Business, 25 on Professional, and unlimited on Enterprise and Manufacturing. An invitation over the limit is blocked with an upgrade prompt.

Customers, employees, suppliers and drivers do not take a seat — they get a portal link instead of an account.

Sessions and policies

  • Sessions — every active session per user, with a revoke button for the laptop that walked
  • Policies — session timeout, password rules, lockout after failed attempts, and the seven-year POPIA retention setting

Revoking a session or changing a user's role takes effect on their next request, not at their next login.

Two-factor authentication

Adoption is shown as a ring, so you can see at a glance who has not switched it on. Ledgr supports any authenticator app — the six-digit code kind.

Recovery codes

Enrolling produces ten single-use recovery codes, displayed once. Ledgr keeps only a fingerprint of each, so there is no screen, no export and no support request that can ever show them to you again. Save them somewhere that is not the phone holding the authenticator.

A recovery code is entered in the same box as the six-digit code at sign-in — Ledgr tells them apart by their shape, so there is no second screen to find while you are locked out.

If somebody loses their phone

An owner or administrator can reset another person's two-factor from their user record. It needs the roles edit permission and an owner or admin role, and:

  • You cannot reset your own — that would make two-factor optional for whoever holds the permission.
  • If you have two-factor on yourself, you are asked for your own code first.
  • The affected person's sessions are revoked and they are emailed about it. Ledgr reports whether that email actually went, rather than assuming it did.
  • It is written to the audit log as a warning, because it is a security event and should be visible as one.
Why this exists.

Two-factor used to be a one-way door: every route asked for the user's own current code, login refused without one, and a password reset did not clear it. A lost phone locked somebody out of the business, not just out of a device, and only somebody with database access could undo it. Both ways back in — the codes and the reset — close that.

API keys

  1. Roles & Users → API keys → Generate
  2. Scope it

    Grant only the permissions the integration needs — for example transactions:write for a billing feed.

  3. Bind it to a contact if the integration bills

    Required for the monthly billing ingestion endpoint, so the aggregate lands on the right customer.

  4. Copy the key now

    The plaintext is shown once and never again. Store it in your secret manager, not in a chat message. If it is lost, revoke it and generate another.

How to use a key is covered in the developer docs.

The audit log

Events are recorded with a severity — info, warning or error — and can be filtered by it. The log holds who did what and when, and is retained for seven years to satisfy POPIA. It is the first place to look when a figure changed and nobody remembers changing it.

POPIA also gives your data subjects rights you have to be able to action: access, correction and deletion. Contact records and their communication history are exportable and deletable from the contact itself.