Business software 6 min read
User roles and permissions in business software, explained
How roles and permissions control who can see and do what in business software, and how to plan them around real jobs.
On this page
Role-based access control means giving each person in a business system a role, such as sales, finance or manager, and deciding what each role can see and do, instead of setting permissions person by person. It keeps sensitive information with the people who need it, reduces mistakes, and makes it simple to add or remove staff. Planning roles around real jobs before a system is built is far easier than untangling access after launch.
A permission is a single action a user is allowed to take, such as viewing invoices or approving refunds. A role is a named group of permissions. This guide explains how the pieces fit together and how to plan them. If you are planning a business system, our custom software service page explains how we work.
Why not everyone should see everything
Giving every user full access is quick at first, but it creates risks that grow with the team.
- Privacy. Customer details, salaries and health or financial information should only be visible to those who need them.
- Mistakes. Someone who can delete records or change prices by accident eventually will.
- Fraud. When one person can create, approve and pay an invoice, nobody else checks the transaction.
- Security. If an account is compromised, the attacker gets whatever access that account had.
- Clarity. Screens full of options people never use make everyday work slower.
A worked example
In a travel agency's back office, reservation agents need to create and view bookings, but not change supplier markups. The finance team needs to see payments and issue refunds, but not edit bookings. Managers need reports across both. Three roles with clear permissions give each group what it needs and nothing more.
Health records are a clear case, as our guide on what a clinic management system should handle explains.
Roles, permissions and users in role-based access control
The three building blocks fit together like this:
| Building block | What it is | Example |
|---|---|---|
| Permission | One action on one type of record | "Issue refunds", "View invoices", "Edit prices" |
| Role | A named group of permissions | "Finance", "Sales", "Manager" |
| User | A person with one or more roles | A finance officer with the Finance role |
- Permissions are defined by the system, based on what it can do.
- Roles are defined by the business, based on jobs.
- Users are given roles, not individual permissions, so a new starter can be set up in one step.
- Some rules depend on the record itself, such as "agents can only see their own customers". These are usually built into the system alongside roles.
In Laravel applications, rules like these are typically written as policies and gates, which keep the checks in one place.
Planning roles around real jobs
Roles work best when they reflect how people actually work.
- List every job that uses the system, including occasional users such as accountants or auditors.
- For each job, list the tasks they perform in the system.
- Turn tasks into permissions, such as "create booking" or "approve refund".
- Group permissions into roles, one per job, keeping the list short.
- Mark sensitive permissions, such as refunds, deletions, price changes and exports, and give them only to the roles that truly need them.
- Plan for exceptions, such as a team leader who needs one extra permission, rather than creating many near-identical roles.
A checklist of sensitive permissions to review
- Issuing refunds or credits.
- Changing prices, discounts or markups.
- Deleting records.
- Exporting customer or financial data.
- Managing users and roles.
- Changing system settings or integrations.
Our guide on how to write software requirements without technical skills explains how to capture roles as part of the wider requirements.
A CRM is a common example, where sales staff, managers and finance each need different access, and our guide on what a custom CRM can do shows how it fits a service business.
Audit history and accountability
Permissions decide what people can do. Audit history records what they actually did.
- Record important actions, such as who created, changed, approved or deleted a record, and when.
- Record before and after values for sensitive changes, such as prices or payment details.
- Make the history easy to read from the record itself, so managers can answer questions quickly.
- Protect the history so ordinary users cannot edit or delete it.
- Review it regularly for unusual activity, such as many refunds by one user.
A worked example
A customer disputes a refund, saying they were promised the full amount. The booking's history shows that a finance officer issued a partial refund, with a note referring to the supplier's cancellation fee, and that a manager approved it the same day. The question is answered in minutes, from the record itself, without searching emails.
Questions audit history should answer
- Who approved this refund, and when?
- Who changed this price, and what was it before?
- Which users exported customer data this month?
Mistakes to avoid
| Mistake | Why it causes problems | Fix |
|---|---|---|
| Giving everyone administrator access | Anyone can change anything, by accident or on purpose | Keep administrator access to a very small group |
| Creating a role for every person | Roles become impossible to manage | Base roles on jobs and handle rare exceptions separately |
| Forgetting to remove access when people leave | Former staff keep access to data | Remove or disable accounts as part of leaving procedures |
| Hiding checks only in the interface | Users can reach actions through other routes | Enforce permissions in the system itself, not only by hiding buttons |
| No review after launch | Roles drift as the business changes | Review roles and user access regularly |
When rolling out a new system, test each role with real tasks before go-live. Our guides on how to roll out new software to your team and how software integrations connect your business tools cover the steps around launch and connecting systems.
Summary
- Role-based access control gives each user roles made of permissions, instead of setting access person by person.
- Limiting access protects privacy, reduces mistakes and fraud, and limits damage from compromised accounts.
- Plan roles around real jobs, keep the list short and give sensitive permissions only where needed.
- Audit history records who did what and when, and should be protected and reviewed.
- Avoid shared administrator access, too many roles, forgotten leavers and checks that only hide buttons.
Clear roles make a system safer and easier to use for everyone. If you're planning a business system and want help with roles and permissions, you can tell us about it here.