Why in-app authorization doesn’t scale
In a monolithic app, you can abstract authorization using authorization libraries — building a permission system for each application or service that connects directly to the database. This works well until you have several applications or many services. Managing multiple authorization systems for each application is not a scalable approach. Most companies eventually design these systems as abstract entities: a centralized engine that caters to apps with many services. But building that engine yourself is hard.Stateless engines need data
Centralized authorization engines are stateless — they don’t store data. Every access check requires loading authorization data and relations from the database, which creates significant performance and scalability overhead.
High availability is required
The authorization service will be accessed by nearly every other service in your stack. It must be at least as available as the rest of your infrastructure — fast, consistent, and available at all times.
Policy management is its own service
You need an additional service to store your authorization data model, including roles, attributes, and relationships. This service must manage all authorization policies and give administrators the flexibility to update them.
Refactoring is risky
Authorization systems sit at the heart of your product. Refactoring them is difficult, and changes risk breaking access control across every service that depends on them.
What authorization as a service provides
Authorization as a service abstracts your authorization logic from your codebase and application logic, allowing you to more easily reason, test, and debug your authorization in a scalable, secure, and extendable way. Permify centrally positions itself in your environment as a service consisting of two parts:- A Permission Database to store your policies and related authorization data in a structured way.
- A Policy Decision Point (PDP) to evaluate authorization queries — such as access checks — according to that data.
Core concepts
Entities
Entities are the objects in your system that you want to control access to. In Permify’s authorization language, you define entities and the relations and permissions that apply to them.Relations and permissions
Relations describe how subjects (users or other entities) relate to a resource — for example,owner, admin, or member. Permissions are derived from those relations and can compose multiple relations using logical expressions.
Permify’s authorization language is compatible with RBAC, ReBAC, and ABAC, so you can model virtually any access control pattern.
Relational tuples
Authorization data is stored as relational tuples — structured records that bind a subject to a relation on a specific resource. The basic tuple format is:user:1 an admin in organization:1:
repository:1 as belonging to organization:1:
Permify is inspired by Google Zanzibar, Google’s consistent, global authorization system used for hundreds of its services including YouTube, Drive, Calendar, Cloud, and Maps.
Benefits of using Permify
Move and iterate faster
Avoid the hassle of building a new authorization system from scratch. Save time and money by leveraging existing, battle-tested code developed by a dedicated team. You can get started quickly with a simple API that integrates directly into your application.Scale as you wish
Permify applies the proven techniques Google used in Zanzibar. The Zanzibar system achieved more than 95% of access checks responded to in 10 milliseconds and maintained more than 99.999% availability over a 3-year period.Permify can achieve response times of up to 10ms for access control checks, handling up to 1 million access requests per second, thanks to its parallel graph engine and cache mechanisms.
Gain visibility across teams
Enterprise-grade authorization requires robust, fine-grained permissions and the ability to observe and manage them as a group. Code-level authorization logic and distributed authorization data across multiple services make it harder to change permissions and keep them current. Permify is designed to abstract authorization logic from your code and make authorization accessible to everyone in your organization — including non-technical team members.Be extendable, at any time
Products change rapidly as user requirements evolve. Permify has an extendable authorization language that allows you to update your current authorization model easily, securely, and without affecting production. Once tested and ready, you can switch to a new version of your model without breaking existing access control.Audit your authorization and ensure security
Protect your data, prevent unauthorized access, and ensure your customers’ security. Permify supports fraud detection, real-time transaction monitoring, and risk assessment through functions accessible via single API calls.How Permify works
Model your authorization
Define your entities, relations, and permissions using Permify Schema — a domain-specific language compatible with RBAC, ReBAC, and ABAC patterns.
Store authorization data
Write relational tuples to Permify’s permission database. These tuples represent the real-world relationships in your system (who owns what, who belongs to which organization, etc.).