Frequently asked questions
- What is the most important principle in tenant permission design?
- The most important principle is to enforce tenant isolation first, then apply role and resource permissions inside that boundary. No user should ever access data outside their tenant, even if they have a broad role.
- Should SaaS apps use RBAC or ABAC for multi-tenant authorization?
- Many SaaS products start with RBAC because it is easier to explain and maintain. As the product grows, ABAC or policy-based checks can be added for finer control over ownership, geography, or workflow state.
- How do you prevent cross-tenant data leakage?
- Use tenant-scoped identifiers, server-side authorization checks on every request, and database constraints or query filters that always include tenant context. Do not rely on the frontend to hide data.
- Can one user belong to multiple tenants?
- Yes, but the application must treat each tenant context separately. The user should explicitly switch tenants, and every request should carry the active tenant ID with strict validation.
- Does designing permissions this way guarantee compliance?
- No. Good authorization design supports security and auditability, but it does not guarantee compliance or legal outcomes. For ISO or regulatory work, a professional audit and formal review are still needed.
Time information: This article was automatically generated on September 21, 2026 at 5:36 PM (Asia/Jakarta, 2026-09-21T10:36:25.003Z).
Tenant permission design starts with tenant isolation
In a multi-tenant SaaS, permission design is not just about who can click which button. It is about ensuring that every request is evaluated in the correct tenant context before any data is returned or changed. If that boundary is weak, a user in one tenant can accidentally or maliciously reach another tenant’s records.
For funded startups and enterprise SaaS teams in Indonesia, this matters even more because customer trust is often won or lost during early adoption. A strong design reduces security incidents, simplifies audits, and makes it easier to scale across customers in Jakarta, Surabaya, Singapore, and beyond.
The safest mental model is simple: tenant first, permission second. First confirm which tenant the request belongs to. Then check whether the user can perform the action on the specific resource inside that tenant.
What should a multi-tenant permission model include?
A practical model usually has four parts:
- Tenant identity — the organization, workspace, or customer account.
- User identity — the person or service account acting in the system.
- Role or policy — what actions are allowed.
- Resource scope — which objects the action applies to.
This separation keeps the system understandable. For example, a finance manager in Tenant A may be allowed to approve invoices, but only for data owned by Tenant A. The same user might also belong to Tenant B as a viewer, but that does not transfer privileges automatically.
A common mistake is to store permissions only as a list of actions like can_edit_invoice. That is not enough in a multi-tenant product. You also need scope: which tenant, which project, which department, and sometimes which workflow state.
Why RBAC alone is often not enough
Role-based access control is a good starting point because it is easy to explain to customers and internal teams. You can define roles such as admin, manager, editor, and viewer. For many early-stage products, that is enough to ship safely.
However, RBAC becomes limiting when permissions depend on context. Examples include:
- A user can approve only invoices below a certain amount.
- A user can view records only if they belong to the same branch.
- A user can edit a document only while it is in draft status.
- A support agent can access a tenant only while assigned to an active ticket.
These rules are better handled with policy-based checks or ABAC-style conditions. In practice, many teams use a hybrid approach: RBAC for baseline access, plus conditional rules for sensitive workflows.
How do you design for least privilege?
Least privilege means users get only the access they need to do their job. In SaaS architecture, this should be the default, not an exception.
A good way to apply it is to define permissions from the bottom up:
- Start with read-only access.
- Add write access only where necessary.
- Separate admin actions from operational actions.
- Treat destructive actions, exports, and billing changes as privileged.
This is especially important for products handling payments, customer data, or compliance evidence. For example, if you are building a billing workflow like RTPintar or a document-signing workflow like SealRoute, exporting data or changing recipient lists should require stronger checks than viewing a dashboard.
Least privilege also applies to internal teams. A customer success agent, a developer, and a support engineer should not share the same access model. If your company is remote-first, as APLINDO is, you should assume access will be used from many locations and devices, so permission design must be resilient by default.
Where should authorization checks live?
Authorization must be enforced on the server, not only in the UI. Hiding a button in the frontend is useful for user experience, but it is not security.
The best pattern is to centralize authorization logic in one layer that every API endpoint uses. That layer should validate:
- the authenticated user
- the active tenant
- the requested resource
- the allowed action
- any contextual policy conditions
This makes behavior consistent across web apps, mobile apps, and integrations. It also helps when you need to add audit logs or change policy rules later.
For database access, always include tenant context in queries. A query like SELECT * FROM invoices WHERE id = ? is risky if id is globally guessable. A safer pattern is WHERE tenant_id = ? AND id = ?. In many systems, tenant scoping should be enforced both in application code and at the data layer.
How do you handle users who belong to multiple tenants?
Many B2B SaaS products allow consultants, agencies, or enterprise operators to belong to more than one tenant. This is common in Indonesia too, especially for partner ecosystems and managed service workflows.
The key is to make tenant switching explicit. Do not infer tenant context from the last page visited or from a weak client-side flag. Instead:
- require the user to select an active tenant
- store the active tenant context in the session or token claims carefully
- validate that the user is a member of that tenant on every request
- log tenant changes for auditability
If a user has different roles in different tenants, those roles must be resolved per tenant. A superuser in one workspace should not automatically become a superuser everywhere else.
What are the most common permission design mistakes?
The most common mistakes are easy to miss during fast product delivery:
- Using only frontend guards and assuming they are enough.
- Mixing tenant IDs and user IDs in the same permission table without clear scope.
- Granting broad admin access to reduce support tickets, then never tightening it.
- Forgetting background jobs and webhooks that can bypass normal request paths.
- Not logging authorization decisions, which makes incident response harder.
- Using global object IDs without tenant checks, creating IDOR risks.
These problems often appear after the first enterprise deal or security review. Fixing them later is more expensive than designing for them early.
How can teams keep the model maintainable?
A maintainable authorization system should be boring in the best way. Engineers should be able to understand it quickly, and product teams should be able to explain it to customers.
A few practices help:
- Keep role definitions small and named by business function.
- Store permission rules in one source of truth.
- Add tests for cross-tenant access, not just happy paths.
- Use audit logs for sensitive actions like billing, exports, and admin changes.
- Review permission changes during feature design, not after release.
If your product is growing fast, consider a policy engine or a dedicated authorization service once rules become too complex for scattered conditionals. That can be especially useful for SaaS platforms serving multiple industries across Indonesia and international markets.
Key takeaways
- Tenant isolation must come before role checks in every authorization flow.
- RBAC is a good start, but multi-tenant SaaS often needs contextual rules too.
- Enforce permissions on the server and in the data layer, not just in the UI.
- Make tenant switching explicit for users who belong to multiple organizations.
- Log sensitive actions and test for cross-tenant leakage early.
A practical rule of thumb
If you can describe a permission rule without mentioning tenant context, it is probably incomplete. In multi-tenant SaaS, every access decision should answer three questions: who is acting, which tenant are they acting in, and what resource are they trying to touch?
That discipline helps teams build safer products, pass enterprise reviews more smoothly, and reduce the chance of costly security mistakes. For Indonesian SaaS companies aiming to serve larger customers, it is one of the highest-leverage architecture decisions you can make.
When should you get expert help?
If your authorization model is becoming difficult to reason about, or if you are preparing for enterprise procurement, security review, or ISO-related work, bring in experienced architects early. APLINDO in Jakarta helps startups and enterprises with SaaS engineering, applied AI, Fractional CTO support, and ISO/compliance consulting. For regulated or high-risk systems, a professional audit is still the right next step; no design pattern can guarantee certification or legal outcomes.

