Compartmentalizing access: users, groups and least privilege in Cloudby

Last updated: August 22, 2026

A note on how this guide is written. This is not a walkthrough of one screen. It is a best-practice guide: how to think about who can do what in your organisation, and how to keep that arrangement sound as your team grows and changes. The mechanical steps (how to create a user, invite someone, build a group) already live in Manage users and access; this guide assumes you can find your way there and instead focuses on the judgement calls around it.
Who this is for: whoever is responsible for deciding who can see and do what in your organisation, typically an owner or an office manager, in any business past the point of everyone simply sharing one login. You do not need a background in IT security to follow this; every idea here is explained from first principles.
Scope: designing user groups, applying least privilege, using Cloudby’s per-document review step for basic segregation of duties, and keeping access current as people join, move and leave.
What this guide is not: a click-by-click tutorial (see Manage users and access for that), and not a guide to branch- or location-restricted access, which Cloudby does not support today (more on this below).
What you will have by the end. A clear model for designing groups around jobs rather than people. A clear picture of what Cloudby’s document review step can and cannot do for you today, and how to make it actually separate the person who prepares a document from the person who approves it. A repeatable onboarding and offboarding routine. And a sense of how this all scales, from a one-person shop to a business with an external bookkeeper who only needs temporary, narrow access.

1. Why this matters

Every business that grows past one or two people who see everything eventually runs into the same handful of problems. Someone in a junior role can technically delete a customer’s entire invoice history, because nobody ever narrowed what their account could reach. A staff member who left six months ago still has a working login, because removing people is not part of anyone’s routine. A document gets created, submitted and approved by the same person in one sitting, because the same account can do all three, and nobody would ever know unless they went looking. None of these are hypothetical: they are the ordinary, unglamorous ways access control quietly rots in a growing business, not the result of anyone being careless on purpose.

The fix is not a single setting you switch on once. It is a habit: design access around jobs, grant only what a job needs, and keep the arrangement current. The rest of this guide is that habit, made concrete for Cloudby.

2. The building blocks, briefly

Cloudby’s access model has three layers, covered in full in Users & User Groups: a user belongs to one or more user groups, and each group carries a set of granular permissions. A user’s actual access is the union of everything every group they belong to carries; there is no separate per-user override sitting on top of that. Each group also carries a numeric level, 1 and up, higher meaning more authority, with four groups seeded out of the box to start from: Read-only and General User at level 1, General Manager at level 2, Administrator at level 10.

This guide takes that model as read and spends its time on the part that matters more than the mechanics: how to use it well.

The Usergroups screen listing the four seeded default groups: Read-only and General User both at Level 1, General Manager at Level 2, Administrator at Level 10
The four groups a new organisation starts with, reached from Menu > Settings > Users > Usergroups

3. Least privilege as the core discipline

Least privilege means exactly what it sounds like: give each person the smallest set of permissions that lets them do their actual job, no more. It is easy to state and easy to drift away from in practice, usually for a reasonable-sounding reason in the moment: it is faster to add someone to an existing broad group than to think about what they specifically need, or a manager gets added to a wide “just in case” group during a busy week and nobody ever revisits it.

Because Cloudby’s access is composed rather than assigned in one lump, least privilege is achievable without constant friction: you build several narrow groups and let people belong to more than one, rather than maintaining one bloated group per rough seniority tier. A person who does both sales and light reporting joins a Sales group and a Reporting group; they get exactly the union of the two, nothing else.

4. Design groups around job functions, not people

The single most useful habit in this whole guide: name and build your user groups after what the job does, not after who currently holds it. “Sales Clerk,” “Accounts Payable,” “Warehouse Staff,” rather than “Ahmad’s access” or “Temp access for the new hire.” A job-shaped group survives staff turnover for free: when someone leaves and someone else takes the role, you move the group membership, not rebuild the permissions from scratch.

A practical way to get there: list the actual jobs done in your organisation (not the org chart, the jobs), and for each one write down what it needs to touch. Sales Clerk needs to create and view sales documents, nothing in Purchase, nothing in Settings. Accounts Payable needs Purchase and Bill access, and arguably nothing in Sales at all. Build one group per job, assign the matching permissions, and add people to the groups that describe what they actually do. Someone doing two jobs simply belongs to two groups.

Worked example. A “Sales Clerk” group holds just the sales permissions; your counter staff join it and can do exactly the sales work and nothing more. A supervisor who needs both sales and reporting simply joins both the Sales Clerk group and a separate Reporting group, and inherits the union.
A user group's Permissions tab, showing the Sales Module's Read, Create, Edit, Delete, Confirm and Cancel checkboxes per document type
A group’s Permissions tab: granular, per document type and per action, this is what “job-shaped” actually looks like on screen

5. Segregation of duties, applied concretely

This is the section worth reading most carefully, because Cloudby’s tool for this is real and useful, but basic, and using it well means understanding exactly what it does and does not do.

Every major document type in Cloudby, sales and purchase documents, bills, contras, reimbursements, payroll batches and more, can pass through an optional Verify step between Draft and Confirmed. Whoever is working the document chooses whether to submit it for review or confirm it directly; when it is submitted, a reviewer records a verdict, accepted or rejected, and an accepted document moves on while a rejected one returns to draft with the reviewer’s reason attached. This is described in full in Approval and Verification.

A Draft Sales Invoice with its status control open, showing the Submit for Review option alongside going straight to confirmed
A Draft document’s own status control, where whoever is working it chooses Submit for Review or goes straight to Confirmed

Here is the part that matters for segregation of duties specifically, and it is worth being direct about: there is no organisation-wide switch that forces every document through Verify. Every document type has a direct path straight to Confirmed alongside the path through Verify, and whoever is holding the document each time picks which one to take. The only way Verify actually enforces a second pair of eyes is by permission design: if the same person’s user group holds both the permission to create and edit a document type and the permission to confirm it, nothing stops them from creating a document and confirming it themselves in one sitting, because the system itself does not check whether the creator and the approver are the same person. Tested directly: a user holding both permissions sees exactly the same generic confirmation prompt approving their own document as they would approving anyone else’s, no warning at all.

A Sales Invoice in Verification status with dedicated green Approve and red Reject buttons
A document in Verification status: whoever holds the confirm permission for it sees Approve and Reject

So real segregation of duties here means one deliberate act on your part: for any document type where a second sign-off should actually mean something, put the create and edit permission in one user group and the confirm permission in a different one, and make sure no single person belongs to both. Do that, and the preparer’s only real path is Draft to Verify, and someone else with the confirm permission has to actually act on it. Skip that deliberate split, and Verify is available but not actually enforcing anything.

A rejected Sales Invoice, with a Review rejected banner showing the reviewer's reason and name directly on the document
A rejected document: the reason travels back to the author, right on the document itself
One more limitation, minor but worth knowing. The record of who approved a document is not as tidy as who rejected one: a rejection always records who rejected it and why, but an approval is not separately stamped with an approver on the document itself. It is not lost information, every status change, approvals included, is recorded in the document’s own Activity history with who did it and when, but if you were hoping to pull a clean “approved by” column straight off the document for reporting, that specific field only fills in on rejection today.
A Confirmed Sales Invoice, posted to accounts, with no approver field visible anywhere on the document
A confirmed, posted document: no “approved by” field appears anywhere on it

6. The authority ladder, used sparingly

A group’s level is a real, server-enforced ceiling, not just a label: you can never create or raise a group above your own current highest level, and you can never assign a user into a group above your own level either. Both are enforced on the server, not merely hidden in the interface, so this cannot be worked around by a clever click.

The practical consequence is simple: the level you personally hold is the level you can hand out to anyone else. Keep your own highest membership no broader than it needs to be, and resist the temptation to push everyone to a high level “to avoid permission errors later.” A permission error is a five-minute fix. An organisation where most staff sit at Administrator level because someone got tired of tuning permissions is a much harder thing to walk back.

A user group's own tab, showing its Name and a numeric Level field, here set to 2 for General Manager
A group’s own tab: Name and Level, the plain numeric field that is a real ceiling, not just a label

7. Onboarding as a repeatable process

Treat every new hire the same way, every time: identify which job-shaped group or groups match their actual role, add them to those groups (or invite them directly into your organisation using Invitations, single-use for one specific person or multi-use for a batch of similar hires), and resist adding anything extra “just to be safe.” If their job changes later, add or remove group membership then, when you know what the new job actually needs.

8. Offboarding: remove from the organisation, do not delete

The real, available action here is Remove from organisation, not a deactivate switch. It is worth being precise about this, because it is easy to expect a simple Active/Inactive toggle on a user’s own record and go looking for one: that field exists in the data model, but today it is not something your organisation can reach or change on its own, so it is not the tool to reach for. Removing someone from the organisation does the job in one action: it detaches them from every user group they belong to and from the organisation itself, while leaving the underlying user record untouched. Because the record itself is not deleted, everything that person created, approved or touched stays correctly attributed wherever it is referenced, exactly the outcome you want when someone leaves. Make offboarding as routine as onboarding: the moment someone leaves or changes role in a way that should remove access, remove them the same day, not on the next review cycle.

9. A periodic review cadence

Access drifts even when everyone follows the rules above, simply because businesses change. Set a recurring reminder, quarterly is a reasonable default for a small or mid-sized organisation, to walk through your user groups and ask three questions: does everyone in this group still do this job, does this group still hold only what the job needs, and is there anyone in the organisation who should have been removed and was not. This is a short exercise if you have been disciplined about job-shaped groups, and a much longer one if access has been handed out ad hoc, which is itself a good argument for doing it regularly rather than letting it become a large, dreaded task.

10. Common anti-patterns to watch for

  • One giant “Staff” group everyone belongs to. This defeats the entire point of a granular permission model; it is one login’s worth of access wearing many people’s names.
  • Groups named after people instead of jobs. “Backup for Sarah” or “Ahmad’s group” cannot be handed to a replacement cleanly and nobody remembers what they actually contain a year later.
  • The same person holding both the create/edit and the confirm permission on a document type you actually care about controlling. As covered in section 5, this quietly turns Verify into a formality rather than a real check.
  • Former staff left in the organisation “in case they need something.” If they need something again, invite them again; a working login for someone no longer with the business is pure downside.
  • Pushing everyone’s level up to stop dealing with permission errors. A high level handed out broadly is exactly what lets one compromised or careless account do the most damage.

11. Worked examples by team size

A solo shop, just you. One user, the default Administrator group, nothing more to design yet. Worth knowing anyway for the day you hire your first person.

A small functional-team business. A handful of job-shaped groups: Sales Clerk, Accounts Payable, General Manager (broader, but still not everything), and an Administrator group held by the owner and perhaps one trusted deputy. Verify switched on deliberately for the document types where a second sign-off matters most, most commonly bills and payments, with the create/edit and confirm permissions for those specifically split across two different groups.

An external bookkeeper needing scoped, temporary access. Build a narrow group covering exactly the Finance screens a bookkeeper needs, invite them with a single-use invitation, and calendar their own review, or their removal from the organisation outright, for the date their engagement ends. This is the least-privilege discipline and the offboarding discipline working together for a case that comes up often in practice: someone needs real access, for a limited time, to a limited slice of the system.

What’s next

A few notes as you keep working with access control in Cloudby:

  • There is currently no branch- or location-scoped permission model. Every permission a group carries applies across the whole organisation; you cannot today restrict a group to, for example, one warehouse or one outlet’s data only. This is a real, greenfield gap, not a configuration you have missed.
  • There is no organisation-wide, configurable approval workflow engine either. The per-document Verify step covered in section 5 is the real tool available today, and it is usable for basic segregation of duties when you deliberately split the create/edit and confirm permissions, but it is not a chain-of-command or multi-step workflow system.
  • A user record does carry an Active/Inactive field, but today it is not something your own organisation can view or change; it is reserved on the platform side. Removing someone from the organisation, covered in section 8, is the real, available action for taking away a departing user’s access.
  • Whenever you add a new module or feature to your organisation, revisit your job-shaped groups: does an existing group’s job description now also cover this new area, or does it need its own group.

Scenarios and troubleshooting

I submitted a document for review and confirmed it myself a moment later, and nothing stopped me.

That is expected given how Verify works today, see section 5. It only blocks self-approval when the confirm permission for that document type sits in a different user group than the one you belong to. Check whether your own group holds both the create/edit and confirm permissions for that document type; if it does, that is the setting to change.

I cannot raise a colleague’s user group to the level I want.

You cannot create or assign a group above your own current highest level, this is enforced on the server rather than being a UI restriction you can work around. Either have someone with a higher level make the change, or reconsider whether that level is needed.

A document I rejected shows who rejected it, but an approved one does not show who approved it.

This is a known limitation rather than something wrong on your end, see the callout in section 5. The document’s own dedicated field for this only records rejections. If you need to know who approved something, check that document’s Activity history instead, every status change including approval is recorded there with who did it and when.

I need to restrict a user group to just one branch or location.

This is not possible today; Cloudby’s permission model is organisation-wide, not branch- or location-scoped. There is currently no workaround inside the permission model itself for this.

I am looking for a way to deactivate a user rather than remove them entirely.

There is no deactivate-then-reactivate switch your organisation can use today, this is a known limitation rather than something you have missed. Remove the person from the organisation instead, covered in section 8: it takes away their access in one action while leaving their name and everything they did correctly attributed. If they come back later, invite them again.

Related