Jul 11, 2025·8 min read

B2B software permissions beyond one big admin role

Learn how to plan B2B software permissions with roles, scopes, examples, common mistakes, and a simple checklist for safer growth.

B2B software permissions beyond one big admin role

Why one big admin role becomes a problem

A single admin role feels fine in the first version of a product. The team is small, the customer list is short, and the people doing setup are usually the same people doing everything else.

That does not last.

Once real customers start asking for exceptions, the admin role turns into a bucket for every permission the model cannot explain. One customer wants a finance person to handle billing but not invite users. Another wants a team lead to add members to one department without changing account settings. A support manager needs access to cases and reports, but should stay far away from invoices and security settings.

If the product only has "user" and "admin," you get stuck with two bad choices. You either say no to a reasonable request or give far too much access.

The deeper problem is that very different powers get mixed together. Billing, user management, security settings, and day-to-day work access are not the same job. When they all sit inside one admin role, someone who needs one narrow task often gets control over the whole account.

That creates tension inside the customer team. Finance wants separation. Team leads want autonomy. Owners want less risk. When the product cannot express those limits, people work around it with shared logins, manual approvals, or a steady stream of support tickets.

A simple example shows the gap. Imagine a company with 40 users across sales, operations, and finance. The finance lead needs invoices and payment methods. The operations manager needs to assign work and manage one team. Neither person should be able to remove the account owner or change company-wide security rules. One big admin role cannot model that cleanly.

Support work gets messier too. When someone asks, "Who changed this setting?" the answer is often just "an admin." That is not much help. As accounts grow, audits get harder, mistakes spread wider, and access reviews take longer than they should.

What looked simple at five users often turns into friction at fifty.

Start with actions, not job titles

Most permission models go wrong on day one. Teams start with labels like "admin," "manager," or "operator," then guess what each person should control. It feels quick, but it usually creates one giant admin role that keeps growing.

A better starting point is a list of actions. Write down what people actually do in the product each week. That gives you something concrete to design around.

Keep the first draft simple. Think in actions like viewing customer records, editing account details, inviting a teammate, exporting reports, approving refunds, and changing billing settings. Titles change from company to company. The work does not. One team may call someone an operations manager, while another gives the same work to support. The action stays the same even when the title changes.

As you list actions, split routine work from rare setup tasks. Routine work happens every day: updating records, reviewing tickets, assigning work. Setup tasks happen less often: changing billing, connecting an integration, setting security rules. Those rare tasks cause trouble when you pack them into the same role as everyday work.

Then mark the actions that can hurt the business if the wrong person uses them. Payments, private data, and security settings need extra care. Exporting customer data is not the same as viewing one record. Changing invoice settings is not the same as creating a draft.

A quick way to spot risky actions is to ask whether they affect payments or contracts, expose private or regulated data, change security or integrations, or delete data or change it for everyone.

Stop before the list gets huge. Your first version should be short enough to test with real users in a week or two. If you end up with 80 actions before talking to anyone, you are probably designing for edge cases instead of normal work.

A short action list is easier to review, easier to test, and much easier to turn into clean roles and scopes later.

Split roles from scopes

A clean permission model has two parts. The role answers "what can this person do?" The scope answers "where can they do it?" When one label tries to do both jobs, the model gets messy fast.

If you create a separate role for every boundary, you end up with copies of the same role. "Team admin," "regional admin," and "project admin" often share most actions. Then you add one new action and have to edit every version.

Use roles to bundle actions that usually belong together. A billing role can view invoices, download receipts, and update payment details. A manager role can invite people, assign work, and approve changes. A support role can read customer records and leave notes, but not export data.

Scopes add the fence. One manager may manage only the sales team. Another may manage the EU region. A contractor may edit only one project. The role stays the same. The scope changes.

In practice, the structure is simple: a role defines actions such as view, edit, approve, or invite; a scope defines a boundary such as one team, one region, one project, or the full account; and an assignment gives one person a role inside one scope.

This split also helps keep account ownership separate from operational access. The account owner should control rare, sensitive actions like changing the subscription, deleting the workspace, or transferring ownership. Most people do not need those rights, even if they lead a department.

Picture a customer account with several teams. The operations lead needs a manager role for the warehouse team only. The finance lead needs billing access across the full account. Neither person needs broad admin power.

That is the point of roles and scopes. You give people enough access to do their work without turning every exception into another admin seat.

Build the model step by step

Start with the things people touch in the product, not with permissions. Make a list of resources: users, invoices, projects, reports, settings. If you miss one now, it usually comes back later as a messy exception.

Next, give each resource a small set of actions. Most teams can start with verbs people already use at work: view, create, edit, approve, export, and sometimes delete. Keep the verbs clear. If two actions feel almost the same, merge them until a real need proves they should stay separate.

Then group those actions into a few starter roles. Aim for roles that match common work, such as finance manager, project lead, support agent, or account owner. Four plain roles are easier to explain and test than fifteen clever ones.

After that, add scopes. This is where you separate "edit own projects" from "edit any project in the team," and "approve invoices in one region" from "approve invoices across the whole account."

Many teams skip this layer, and that is when access control collapses back into one giant admin switch. A support lead may need to view all users in an account but edit only people on their team. Finance may need to export invoices for one region and never touch account settings.

Before launch, test every role against real work instead of reading the permission table by itself. Ask your team to act out a few common tasks. A project manager updates a project for their team. A finance lead approves invoices for one region. A support agent opens a user profile but cannot change billing. An account owner changes workspace settings.

If a task needs three exceptions or a temporary admin grant, the model still needs work. Fix the role or the scope now. Patching live customer accounts later is slower, and people remember permission mistakes for a long time.

This approach keeps the model easier to read and easier to extend. When a new team arrives, you can usually add a scope or adjust one role instead of creating another all-powerful admin.

A simple example from a multi-team account

Plan Roles And Scopes
Turn messy account access into a model your team can explain and ship.

Picture a company with one account, three departments, and a few people who need very different access every day. If you give all of them one admin role, routine work gets risky fast. A person who only needs to help customers can suddenly edit pricing, change billing, or manage users across the whole company.

A better model pairs each action with a scope.

A support rep can view orders for the teams they support, but the system blocks price changes. A finance lead can approve refunds, but only inside one business unit. A team manager can invite new users, but only into their own department. The account owner controls billing, login security, and account-wide settings.

Now each person gets enough access for the job and no more. Support can answer customer questions without touching revenue settings. Finance can process refund requests for their unit without seeing every team in the company. Managers can handle hiring or onboarding without becoming mini admins.

This matters even more when one customer account includes several teams with separate budgets and workflows. A refund approval in one unit should not open the door to refunds everywhere. User invites in marketing should not create accounts inside finance or operations.

Temporary access helps with the odd cases. Say the finance lead needs to check pricing during a quarter-end dispute, or a manager needs short-term access to another department while covering for someone on leave. Instead of creating another broad admin role, grant the extra permission with a clear scope and an end time.

A simple rule works well: elevated access should expire on its own after a fixed period, such as one hour or one day. The person finishes the task, and the permission disappears without anyone having to remember cleanup later.

That is often the difference between a permission model that stays tidy and one that turns into "just make them admin" after six months.

Mistakes that make the model messy

Permission models rarely fall apart in one release. They usually break through small shortcuts. One customer asks for a special role, a broad "editor" role gets one more power, and soon your team cannot explain who can change what.

A common mistake is creating a new role for every customer request. That feels fast, but role names pile up and stop meaning anything. Keep the number of roles small. Solve most requests with scopes, or with a narrow extra permission only if the same need shows up more than once.

Broad editor roles cause a different problem. "Edit" sounds simple, yet teams often hide delete, approve, publish, invite, and settings changes inside it. Those actions carry very different risk, so they should not ride along with normal content changes.

Billing access often gets mixed into daily work permissions. That is usually the wrong split. A team lead may need to manage users, projects, or reports every day and still have no reason to view invoices, change plans, or update payment details.

Teams also forget the actions that sit outside the main screens, and those gaps create the worst surprises. Exports matter because they move data out. Bulk edits and bulk deletes matter because one mistake hits hundreds of records instead of one. API tokens, service accounts, and account-level settings matter because they can affect every team at once.

If you skip these, a role may look safe in the UI but still allow a lot of damage through one click or one script.

Invited users need real testing, not assumptions. The same goes for inherited permissions from parent accounts, business units, or shared workspaces. A contractor invited to one team should not gain access to another team because your system merged direct access and inherited access in the wrong order.

Write tests around a few realistic cases. Test a fresh invite, a user with two team memberships, a user who loses one scope, and a user with API access but no UI access. If your product can answer those cases clearly, the model usually stays clean much longer.

Handle exceptions without making new admins

Audit Sensitive Actions
Check exports, billing, tokens, and account settings before they turn into recurring support tickets.

Most permission problems start when a rare request gets solved with a broad role. Someone needs to refund a payment, export account data, or change billing once, and they end up with admin access forever. It is easy in the moment, but it weakens the model fast.

A better fix is to treat risky actions as exceptions, not as new roles. If an action can change money, security, legal settings, or account structure, put it behind an approval flow. One person requests it. Another person approves it. The system records who did both and when.

This works well for changing billing or plan settings, exporting sensitive data, deleting a team or workspace, and editing security rules or sign-in settings.

Approvals add a small pause, but that pause is useful. It catches mistakes, stops casual misuse, and keeps the permission model clean.

Some people still need extra access for a short time. Give them temporary elevation with an expiry time instead of a permanent role. If support needs to inspect a customer account, let them unlock the needed action for one hour or one day. After that, the access should end on its own.

Start support, success, and account staff with read-only access unless their daily work truly requires more. Many teams hand out wide permissions because they want to avoid friction. Then six months later, nobody knows who can change what. Read-only is a safer default, and you can add small exceptions where needed.

Write down who can grant exceptions and why. Keep it simple. Name the roles that can approve, define which actions they can approve, and require a reason field. If nobody owns exception grants, they spread through Slack messages, side deals, and memory.

A short policy helps more than another admin role. People should know when to ask, who can say yes, how long access lasts, and where the record lives. That gives you flexibility without turning every odd case into full control.

Quick checks before you ship

Bring In Fractional CTO Help
Get Oleg's help on access control, infra, and rollout decisions.

Run five small tests with a fake customer account before release. Do not test with your own super-admin login. That hides the gaps.

Give one test user the most common non-admin role and ask them to finish a normal day. They should create records, update data, export what they need, and pass work to a teammate without asking for extra access every hour.

Next, test a team lead or office manager account. That person should be able to invite coworkers, reset access, or move someone between teams without seeing billing, tax details, or company-wide security settings. If user setup and money settings still live together, you have not escaped the one big admin role.

Then check scope. A manager for one team should work inside that team only. If they can open another department's data just because they share the same role name, your scopes are too broad.

A short release checklist helps catch the usual mess:

  • A regular user can finish routine work without admin help.
  • A people manager can invite users without access to billing.
  • A scoped manager can act inside their own team, region, or client group only.
  • The audit log shows who changed access, what changed, and when.
  • You can remove or replace a role without locking users out of the account.

That last point gets missed a lot. Roles change over time, especially in growing accounts. If deleting one old role breaks reports, approvals, or login rules, the model is too tangled.

Watch the logs during these tests. You want a clear trail for every permission change, including the actor, the affected user, and the timestamp. When a customer asks, "Who gave this person access?" support should find the answer in seconds.

If one of these tests fails, stop and fix it before launch. Permissions are much harder to clean up once real customers build teams, habits, and workarounds around a weak access model.

What to do next

Start with evidence, not guesses. Your support inbox usually tells you where the permission model hurts first. Look for tickets about people getting blocked, seeing too much, or asking a teammate with admin access to do simple work for them.

Then pick one real customer account and map the people inside it. Do not map your whole market yet. One account with a few teams is enough to show the common patterns: an owner, a finance person, a manager, a regular user, and maybe an outside contractor.

Write down what each person needs to do, where they can do it, and what they should never touch. That simple exercise gives you a much better base than starting with job titles alone.

A short working draft is usually enough. List the 10 to 20 actions people use most, group those actions into small roles, add scopes such as team, project, workspace, or account, and mark the risky actions that need extra review.

After that, test the draft with the people who hear customer pain every day. Product will spot UX issues. Support will spot the confusing cases. Sales will tell you where prospects ask for account controls during evaluation. If one of those teams cannot explain the model in plain language, users will struggle too.

Run one tabletop exercise before rollout. Take a sample account and ask practical questions. Can a team lead invite users only to their team? Can finance view invoices without changing account settings? Can a contractor update one project without seeing everything else? You will find gaps quickly.

If your product already has shared accounts, audit logs, billing controls, or regulated data, an outside review is often worth it. Oleg Sotnikov at oleg.is works as a Fractional CTO and startup advisor, and this kind of permission and rollout review fits naturally into that work.

The goal is modest: fewer permission tickets, fewer accidental blockers, and far fewer moments where "just make them admin" feels like the only fix.

Frequently Asked Questions

Why does one admin role stop working in B2B products?

Because it forces you into two bad options: block a reasonable request or give too much access. As accounts grow, billing, user setup, security, and daily work stop fitting inside one role.

Should I start with job titles or with actions?

Start with actions people take every week, like viewing records, inviting users, approving refunds, or changing billing. Job titles vary between customers, but the work stays much more consistent.

What is the difference between a role and a scope?

A role answers what someone can do. A scope answers where they can do it, like one team, one region, one project, or the whole account.

How many permissions should I define at the start?

Keep the first version small. Most products can start with 10 to 20 common actions and a few plain roles, then expand after real customer feedback.

Should billing access live inside manager or admin roles?

Put billing in its own role or behind extra approval. Team leads often need to manage people or projects, but they usually do not need invoices, plans, or payment details.

How should I handle one-off exceptions without making someone admin?

Use temporary access with a clear expiry time. Give the person only the action and scope they need, then let that access end on its own after the task ends.

What should I test before I ship a permission model?

Test with realistic accounts, not with a super admin login. Check a regular user, a team lead, a scoped manager, a user with two team memberships, and someone who loses access to one scope.

Which permissions do teams usually forget?

Look at exports, bulk edits, bulk deletes, API tokens, service accounts, and account settings. Those actions often cause the biggest problems because one click can affect far more than one record.

How do I make permission changes easier to audit?

Create a clear audit log for every access change and every sensitive action. Support should see who granted access, who used it, what changed, and when it happened.

When should I ask an outside expert to review permissions?

Bring in outside help when your team keeps patching exceptions, customers ask for tighter controls, or regulated data and billing rules raise the stakes. A fresh review can simplify roles, scopes, and rollout before the model turns messy.