An “admin” checkbox can hide a surprising amount of unresolved product thinking. Can this person invite colleagues, view every customer's record, correct a mistake, approve a request, or change the organisation's settings? Those responsibilities do not necessarily belong together.

Permissions deserve an early product conversation because they describe how people work with one another. Treating them as a small technical task near launch can leave both the interface and the operating process poorly defined.

Describe actions in a real working context

Take a hypothetical business with several branches. A branch manager needs to manage local bookings. A regional manager needs to compare activity across branches. A support agent needs to investigate a customer problem.

Start with those tasks rather than a list of impressive role names. Which records does each person need? Which actions should they be allowed to perform? Does their responsibility change when they temporarily cover another location?

The answer should distinguish visibility from authority. Someone may need to read a booking without being allowed to cancel it. Someone may prepare a change that another person must approve. A single broad role can make the initial interface easier to build while making these working arrangements harder to express.

Design the denied and delegated journeys

A user who lacks permission still needs to understand what to do next. Should they request access, contact a manager, or ask someone else to perform the task? The product should avoid exposing private information while giving a useful route forward.

Delegation also needs an end. If a colleague covers a branch for a week, decide how temporary access is granted, reviewed, and removed. Otherwise, the temporary arrangement can quietly become the permanent model.

The engineering enforcement must match the interface. Hiding a button is not a substitute for checking whether an action is allowed. OWASP's authorization guidance recommends least privilege, denial by default, and permission checks on every request.

Test with more than the most powerful account

A demonstration using an administrator can conceal an unusable everyday workflow. Review the product as a branch employee, a manager, a recently transferred colleague, and someone whose access has been withdrawn.

Include the transitions between those states. What happens to work already in progress? Does a saved link still reveal information? Can the support team explain why an action was rejected without granting broader access just to make the issue disappear?

Keep a readable description of these rules with the product decisions. It gives designers, engineers, and operating staff a shared reference when a new feature introduces another action or another kind of record.

A permission model should express the way the business intends to work. The code then has a clear rule to enforce, and users have an experience that reflects their actual responsibility.

Talk to us about a product with complex working roles.