BASE44DEVS

ARTICLE · 15 MIN READ

Base44 User Roles and Permissions: Multi-User Setup

Base44 ships a basic admin/user split, but real multi-user apps need role definitions plus row-level rules so each account reads and writes only its own records. The common leak is filtering data in the frontend instead of enforcing ownership in backend functions, which lets any user reach another's data by changing a URL.

Last verified
2026-06-25
Published
2026-06-25
Read time
15 min
Words
2,840
  • ROLES
  • PERMISSIONS
  • MULTI-TENANCY
  • ACCESS-CONTROL
  • RLS
  • SAAS

You built your Base44 app for yourself, or for one client, and it works. Now a real customer wants in — or a whole team, or a second paying account — and a quiet question lands on you that the AI builder never asked: when two different people log in, how does each one see only their own stuff? Right now they might see everything. That is the moment almost every single-user Base44 app has to grow up, and it is the exact problem we get pulled into most often when a founder is about to open the doors.

Multi-user Base44 apps need two layers: roles that define what a user can do, and row-level rules that define which records each user can touch. Base44 ships only a basic admin/user role, so per-record ownership and tenant isolation must be built in backend functions. The classic mistake is filtering data in the frontend, which any user can bypass to reach someone else's records.

Why Multi-User Apps Need Proper Data Isolation

Single-user apps hide a whole category of problem. Making sure Base44 users see only their data is a non-issue when you are the only person logging in, because "show me my records" and "show me all records" return the same thing, so the question of who-can-see-what never comes up. The app feels finished. Then you invite a second person, and every assumption that was safe in a single-user world becomes a way for one user's data to land in front of another. As the lead engineer at Base44Devs, I can tell you this is the single most common gap between an app that demos well and an app that is actually safe to put paying customers on.

The reason it bites so hard is that Base44's AI builder optimizes for the happy path you described to it. You said "build me a dashboard that shows the projects," so it built a dashboard that shows the projects — all of them. It had no reason to know that project 41 belongs to one customer and project 88 to another, because you never told it, and it does not infer multi-tenancy on its own. The app works perfectly in your testing because you are testing as one person. The flaw only appears when a second account exists, by which point the app feels done and the gap stays invisible until someone stumbles into it.

Data isolation is not a nice-to-have feature you bolt on later for polish. It is the load-bearing wall of any app where more than one party stores private information. A scheduling tool where one business sees another's appointments, a client portal where one customer reads another's invoices, an internal tracker where the contractor sees the full-time staff's salary notes — these are not bugs you patch after launch. They are breaches. We treat the move from one user to many as a real architectural step, not a settings change, and the rest of this article is about doing that step correctly. If you are still deciding whether your app needs outside help for it at all, our piece on whether you need a developer for your Base44 app frames that call.

Roles, Permissions, and RLS Without the Jargon

The vocabulary around Base44 multi-user access control scares non-technical founders more than the concepts do, so let me strip it down. There are really only three ideas, and once you see them as three separate jobs, the whole thing stops being mysterious.

A role is a label that says what kind of user someone is — admin, manager, member, viewer. Roles answer the question "what actions is this person allowed to take?" An admin can delete things and invite people; a viewer can only look. Permissions are the specific abilities a role grants — "can edit billing," "can export the customer list," "can change another user's role." A role is just a convenient bundle of permissions. So far this is the part Base44 sort of helps with, because it gives you a role field on the user.

The third idea is the one Base44 leaves entirely to you, and it is the one that actually keeps customers' data apart. Row-level security, or RLS, answers a different question: not "what can this person do?" but "which specific records can this person touch at all?" Two users can both have the "member" role and identical permissions, yet member A must only ever see A's records and B only B's. RLS is the rule that, for every row of data, decides whether the current user may read or write it. Roles and permissions are about the verbs; RLS is about the nouns.

Here is the distinction in one table, because founders consistently conflate these three and then wonder why their app still leaks:

ConceptQuestion it answersExampleDoes Base44 give it to you?
RoleWhat type of user is this?"She's an admin, he's a member"Partly — one basic role field
PermissionWhat action is allowed?"Members can't delete invoices"No — you build the checks
Row-level security (RLS)Which records can this user touch?"Member A sees only A's invoices"No — you build the ownership rules

You need all three working together. Roles without RLS means every member can read every other member's data — a classic, embarrassing leak. RLS without roles means you have no clean way to give a team lead the broader access they legitimately need. The reason proper access control feels like real work is that it is three jobs, not one, and Base44 only hands you a fraction of the first. Our Base44 authentication patterns guide covers the login side that sits underneath all of this; this post picks up where login ends, at the question of what each authenticated user is then allowed to see and do.

The Mistake That Leaks One User's Data to Another

If I had to name the single error that produces the most data leaks in Base44 apps, it is this: enforcing data isolation in the frontend instead of the backend. It is so common, and so dangerous, that it deserves its own section, because the AI builder makes it almost by default.

Here is how it happens. You ask Base44 to "only show the current user's orders," and it writes frontend code that fetches the orders and filters the list down to the ones belonging to whoever is logged in. On screen, it looks perfect — each user sees their own orders and nothing else. The problem is that the filtering happens in the browser, after the data has already left the server. The server sent every order to the browser; the browser just chose to display a subset. Anyone who opens their browser's developer tools, or changes a record ID in the URL, or replays the underlying API call, can pull the records the UI was politely hiding. The data was never protected. It was only hidden.

This is the difference between a curtain and a lock. Frontend filtering is a curtain — it obscures the view but anyone determined walks around it. Backend enforcement is a lock — the server itself refuses to return records the requesting user does not own, no matter what the browser asks for. The correct pattern is that every backend function checks ownership before it returns or modifies anything. When a user requests order 88, the function first confirms order 88's owner field matches the requesting user's ID, and returns a 403 if it does not. The frontend can still filter for a clean experience, but the security lives server-side where the user cannot reach it. We catalog this and its relatives in the Base44 data-binding undefined-field fix, because the same loose handling that leaks data also produces the binding errors founders see on screen.

There is a second, sneakier version of this mistake specific to Base44's AI builder. Even if you got the backend enforcement right the first time, the AI agent can silently remove it. You ask for an unrelated change — "make the dashboard prettier" — and the agent regenerates the function behind that dashboard, dropping the ownership filter you carefully added weeks ago. The app still looks fine. Nothing errors. But now every user sees every record again, and you will not know until a customer reports seeing someone else's data. This regression is exactly the failure described in the Base44 RLS out-of-sync after AI edit fix, and it is why we keep access-control logic in a small, audited set of functions rather than spread across the UI where the agent rewrites freely. We call the discipline of re-verifying these checks after every AI-assisted change "guarding the four doors" — read, create, update, delete — because a leak through any one of them undoes all the others.

Internal Team Access vs Customer Multi-Tenancy

Not every multi-user app needs the same depth of isolation, and matching the build to your actual situation saves real money. The dividing line we use is whether your additional users are an internal team or external customers, because the two have very different threat models.

An internal team tool is one where everyone who logs in is on your side — your staff, your contractors, people you trust and can hold accountable. Here the job is mostly roles and permissions: warehouse staff see inventory, managers see inventory plus reports, the owner sees everything including financials. There is data you want to scope — maybe each rep only manages their own accounts — but a leak is a policy problem among colleagues, not a breach of a stranger's private information. The access-control layer can be lighter: a clean role system with a few ownership rules on the sensitive entities is usually enough, and that often fits a smaller engagement. Our Base44 for internal tools solution goes deeper on this category.

A customer-facing multi-tenant app is a different animal entirely. Now the people logging in are separate customers — different companies, different paying accounts — who must never see each other's data. This is true multi-tenancy, and the standard is much higher because a leak here is a genuine security incident that can end the business. Every record needs a tenant identifier, every backend function must scope to the caller's tenant before doing anything, and you need an actual test that logs in as tenant A and confirms it cannot reach tenant B's records by any route. The Base44 for SaaS solution overview covers this multi-tenant pattern in the context of a full product.

The table below maps the two situations to what they actually require, so you can locate yourself before you scope any work:

DimensionInternal team toolCustomer multi-tenancy
Who logs inTrusted staff and contractorsSeparate paying customers
Cost of a leakInternal policy issueSecurity breach, possible business-ender
Roles neededYes — the main jobYes — plus strict tenant scoping
Per-record ownershipOn sensitive entitiesOn every entity, always
Isolation test requiredRecommendedMandatory before launch
Typical engagementFix sprint to standard buildStandard to premium build

The mistake we see is founders building a customer-facing app with an internal-tool mindset — trusting that users will not poke at the URLs — and shipping a multi-tenant product with curtain-grade isolation. If your additional users are strangers paying you, you are in the right-hand column, and the right-hand column does not get to skip backend enforcement.

DIY vs Hiring This Out: The Trade-Off

I am not going to tell you that you can never do this yourself, because some founders can. But I want to be honest about the trade-off, because access control is the one area where a half-right job is worse than no job — it gives you the false confidence of a UI that looks secure while the data underneath is wide open.

The case for doing it yourself is real if your app is a genuinely internal tool with a handful of trusted users and no sensitive personal or financial data. In that world, Base44's basic role field plus a couple of ownership filters might carry you, and you can lean on the platform's defaults. The risk is bounded because everyone with access is someone you trust. If that is you, our Base44 database best practices guide gives you enough to set up sane ownership fields without hiring anyone.

The case for hiring it out gets strong fast once any of three things are true: your users are external customers, the data is private or regulated, or you cannot personally verify that the backend enforcement is correct. That last one is the quiet decider. The entire risk of access control lives in code you cannot see working from the outside — a leak does not throw an error or crash the app, it silently serves the wrong data, so a non-technical founder cannot confirm the lock is actually locked. We test exactly that by logging in as one user and deliberately trying to reach another's records through every door. If you cannot run that test, you cannot know you are safe, and "looks fine in my testing" is precisely the false signal that ships breaches.

Here is the honest trade-off laid out, including the part most guides skip — what it costs you when DIY goes wrong:

PathUpfront costReal riskBest when
DIY with Base44 defaultsYour timeSilent leak you can't detectInternal tool, trusted users, non-sensitive data
DIY plus our auditA $497 auditCaught before launchYou built it but want it verified
Fix sprint for a small appFrom $1,500LowOne or two roles, simple ownership
Standard build for full access controlAround $9,000LowCustomer-facing, multi-tenant, real data

The audit row is the rational middle path for a founder who has already built something. You do not have to choose between trusting yourself blindly and paying for a full rebuild — you can have us pressure-test what you have, find out whether your isolation actually holds, and only then decide how much building is needed. For founders weighing the broader build-versus-hire question, our take on whether to rebuild your Base44 app sits alongside this one.

Have Us Build Your Roles and Permissions the Right Way

If you are about to open your app to a team or to paying customers and you cannot say with confidence that each user only reaches their own data, this is exactly the work our team does, and it is the kind of thing worth getting right before launch rather than after a leak. A standard build from our team is around $9,000 and delivers the full access-control layer on top of what you already have: defined roles and permissions, a tenant or owner field on every entity, backend enforcement on all four doors — read, create, update, and delete — and an isolation test that logs in as one user and proves it cannot reach another's records. For a smaller app with one or two roles, a fixed-price fix sprint from $1,500 may cover it. A full multi-tenant SaaS or a Base44 granular permissions business app — per-feature rules plus an admin console — can move toward a premium build from $15,000.

If you would rather verify before you commit to building, start with a $497 production audit. We test your current isolation the way an attacker would, tell you exactly where it leaks, and if we find a critical issue, the audit fee credits against any fix or build engagement — and the audit is backed by our money-back guarantee. The fastest way to find out where you stand is to tell us about your multi-user setup on a quick call so we can point you at the right scope rather than the most expensive one.

QUERIES

Frequently asked questions

Q.01How do I make Base44 users see only their own data?
A.01

You attach an owner field to every record at creation time and then enforce that ownership in backend functions, not in the frontend. The frontend can hide other users' rows for a clean UI, but the actual security has to live server-side: every read and write checks that the requesting user owns the record before returning or modifying it. If you only filter in the browser, anyone can change a URL or an API parameter and reach another user's data, which is the single most common leak we find in multi-user Base44 apps.

Q.02Does Base44 have built-in roles and permissions?
A.02

Base44 gives you a basic role field on the User entity, usually admin and user, and that is genuinely enough for a simple internal tool. It does not give you granular per-feature permissions, per-record ownership rules, or true tenant isolation out of the box. Anything beyond admin-sees-everything and user-sees-the-app needs a deliberate access-control layer built in backend functions, which is the work most founders discover they need the moment they add a second paying customer.

Q.03What is the difference between roles and row-level security in Base44?
A.03

Roles decide what kind of actions a user can take — an admin can delete records, a viewer cannot. Row-level security decides which specific records a given user can touch at all, so two users with the same role still only see their own data. You almost always need both. Roles without row-level rules means every customer can see every other customer's records. Row-level rules without roles means you cannot give an admin or a team lead the broader access they legitimately need.

Q.04Can Base44 support multi-tenant SaaS with separate customer data?
A.04

Yes, Base44 can run real multi-tenant SaaS, but the tenant isolation is something you build, not a toggle you flip. Each record carries a tenant or account identifier, and every backend function scopes its queries to the caller's tenant before doing anything else. Done correctly this is solid for typical B2B SaaS volumes. Done by filtering in the frontend, it leaks one tenant's data to another, which is the failure mode we are most often hired to close before a launch or a security review.

Q.05How much does it cost to add proper roles and permissions to a Base44 app?
A.05

Adding a real access-control layer to an existing app usually fits inside a standard build around $9,000, which covers role definitions, per-record ownership, backend enforcement on every entity, and a test pass that tries to read another user's data. A narrower job — for example one or two roles on a small app — can land in a fixed-price fix sprint from $1,500. A full multi-tenant SaaS with granular per-feature permissions and an admin console can move toward a premium build from $15,000.

Q.06Why did my Base44 app start leaking data after an AI edit?
A.06

Base44's AI agent regenerates code when you ask for changes, and it does not always preserve the ownership checks you added earlier. A request as innocent as redesigning a list view can rewrite the function that fetched that list and quietly drop the filter that scoped records to the current user. Suddenly every user sees every record. This is why we keep access-control logic in a small set of audited backend functions and verify them after any AI-assisted change, rather than scattering the rules through the UI where the agent can overwrite them.

NEXT STEP

Need engineers who actually know base44?

Book a free 15-minute call or order a $497 audit.