Relationship-based access control is usually introduced through Google's Zanzibar paper, which is accurate but not especially clarifying if you already run role-based access control and want to know what actually differs. The difference is one term in what gets stored. This page works through three escalating requirements to show where that term starts to matter.
Role table
Relationships
A permission check answers "can this subject do this thing to that object" — one subject, one object. Both questions below leave one side open, and answering them means traversing the graph in a direction that requires objects to be stored, not inferred.
Open on the object side. This is the query behind an access review, a "shared with me" view, or a filtered list page.
Open on the subject side. This is the query behind an audit response, a sharing dialog, or an access recertification.
A role is a relationship whose object happens to be the organization. Any role model expresses directly as relationships, which makes adoption additive rather than a rewrite: existing roles keep working, and object-level grants get added only where role explosion was already happening.
Relationship-based authorization adds a service, a schema, and a consistency model to reason about. Those costs are real, and plenty of systems never encounter the problems they solve.
doc_4471_editor is an access control list stored in a table with no index for the object it refers to.Schema language reference, API surface, and deployment guides. authzed.com/docs
The open-source implementation, issues, and examples. github.com/authzed/spicedb
Google's original description of the design this model comes from, including the consistency mechanism.