Comparisons / Platform-native
RowShield vs Appwrite permissions: role models vs live policy checks
The short version
- Appwrite expresses authorisation as permissions attached to users, teams and documents, enforced by its services at the API boundary across databases, storage and functions. RowShield is a scheduled monitor that verifies Supabase PostgreSQL RLS: posture, live anon behaviour and drift.
- Choose Appwrite permissions when — your product runs on Appwrite and its role-and-team model fits your organisation.
- Choose RowShield when — your backend is Supabase — or you are migrating to it — and you want the policy layer verified continuously instead of reviewed in the console.
RowShield rules relevant here
Head to head: Appwrite permissions vs RowShield
| Capability | Appwrite permissions | RowShield | Edge |
|---|---|---|---|
| Authorisation model | Permission labels on users, teams and documents, evaluated by Appwrite services. | SQL row level security evaluated by Postgres for every query on every path. | Parity |
| Team semantics | First-class teams with membership and role keys across services. | Team concepts are yours to model in your schema and express in policies. | Appwrite permissions |
| Standing audit | Permissions are set and then reviewed by hand when someone remembers. | Every scan re-reads posture and diffs it against the previous snapshot. | RowShield |
| Behaviour evidence | Verified by exercising endpoints manually or with tests you write. | A GET-only probe enumerates what the anon key can fetch, automatically. | RowShield |
| Regression alerts | No built-in change detection on the permission surface. | Created, resolved and regressed classifications delivered to chat, email or webhooks. | RowShield |
| Service breadth | Auth, databases, storage, functions and realtime under one permission model. | The Supabase data plane: policies, tables, buckets and deployed client bundles. | Appwrite permissions |
| Hosting options | Self-hosted or cloud, both first-class. | Hosted monitoring with catalog-read credentials, plus a CLI for CI. | Parity |
Column claims about Appwrite permissions are sourced below. Where the edge is theirs, the page says so — and the sections that follow explain why Supabase teams still pick RowShield.
What Appwrite permissions do
Appwrite attaches permissions to resources: users carry labels, teams carry membership and roles, and documents, files and executions declare which of those may act on them. The services enforce the labels at the API boundary, consistently across databases, storage and functions, whether self-hosted or on Appwrite Cloud.
The strength is coherence: one permission vocabulary across the whole platform, with team semantics built in rather than improvised per product. For teams whose access model is organisational — groups of people, roles within groups — it is a natural fit.
Where the scopes differ
The boundary differs first. Appwrite enforces at its API; Supabase enforces in the database. Anything that reaches a Supabase Postgres instance passes through RLS on every path, while an Appwrite permission applies to the requests that arrive through Appwrite services. Neither is wrong; they are different guarantees, and teams choosing between them should choose with that distinction in mind.
Mapped onto RowShield's three lenses: Appwrite's posture is console-managed and reviewed by hand; behaviour evidence comes from your own testing; and there is no time axis — no built-in record of how the permission surface changed between reviews. RowShield holds the Supabase side of all three: catalog posture on every scan, a GET-only probe as the anon caller, and snapshot diffs that classify every change as created, resolved or regressed.
For migrating teams, the translation is the risk: Appwrite's role keys become your schema — membership tables and joins — and policies express them in SQL. A permission model that was explicit in Appwrite's vocabulary can arrive in SQL with a tautological predicate or a missing WITH CHECK clause, and only verification finds that.
Why Supabase teams choose RowShield over Appwrite permissions
On Supabase, the equivalent of "who may read this document?" is a policy question, and policies drift: console edits, AI-generated migrations and hotfixes all land outside review. RowShield watches continuously — nine shipped rules over RLS state, tautologies, missing WITH CHECK, unindexed predicates, unwrapped auth.uid() calls, bucket exposure, anon-readable tables and service_role keys in deployed bundles — with transition alerts to Slack, Discord, email or webhooks.
The probe gives behavioural proof that no permission review provides: what the anon key can actually fetch today. Remediation SQL is generated from your real columns, and the CLI wraps the same engine with CI-safe exit codes.
Where Appwrite permissions are the right choice
For products built on Appwrite's breadth — auth, databases, storage, functions and realtime under one model, with teams as first-class citizens — staying is the coherent decision, and RowShield has nothing to add to an Appwrite backend; it monitors Supabase and says so. The comparison matters at the platform decision, and on the migration path where translated policies need verifying.
Using both
During a staged migration both platforms run: Appwrite keeps serving the origin while RowShield watches the Supabase leg from its first policy. After cutover, the habit worth keeping is Appwrite's explicitness — permissions written down and named — now expressed as policies and continuously verified instead of periodically reviewed.
Frequently asked
- Is RowShield affiliated with Appwrite?
- No. RowShield is an independent product by Veristria, unaffiliated with Appwrite. Appwrite is referenced descriptively and remains a trademark of its owner.
- Is RowShield a good Appwrite permissions alternative?
- On Supabase, yes in the sense that matters: it verifies the RLS layer that replaces Appwrite's permission labels, continuously. It does not enforce anything on Appwrite itself, where its permissions remain the right mechanism.
- Are Appwrite permissions equivalent to Supabase RLS?
- No — they enforce at different boundaries: Appwrite at its API, Supabase in the database engine on every path. Equivalent outcomes are achievable, but the translation from role keys to policy SQL is where mistakes hide, which is why verification is recommended.
Check your project in about ten seconds
Paste a URL. No signup, no writes, nothing stored.
Run the free audit