This section covers the core concepts of the Manetu PolicyEngine. Understanding these concepts is essential to effectively design and implement access control policies.
The PolicyEngine provides fine-grained, context-aware governance where every access decision considers not just who is asking, but what they're accessing, how they're accessing it, and the circumstances of the request. All decisions are observable and auditable.
These core concepts underpin everything in the PolicyEngine.
For integration guidance (PDP/PEP architecture, resource resolution), see the Integration section.
Manetu Resource Notation (MRN) is the universal identifier format used throughout the PolicyEngine. Despite "Resource" in the name, MRNs identify all entity types: policies, roles, groups, resource groups, scopes, and resources. Understanding MRNs is fundamental to working with the PolicyEngine.
PORC (Principal, Operation, Resource, Context) is the universal language for expressing authorization requests. Every policy evaluation receives a PORC expression as input, regardless of the origin of the request. This standardized format decouples policy logic from application-specific request formats.
Policy evaluation happens in four phases, each addressing a different aspect of access control. See Policy Conjunction for details on how phases combine.
Operations define the verbs of your access control model—the actions that principals attempt to perform. They serve as the starting point for policy evaluation and route requests to the appropriate policies. Operation policies can handle public endpoints, JWT validation, and bypass rules using tri-level output.
Roles and groups form the identity layer of access control. Roles connect principals to policies, while groups bundle roles together for efficient management.
Resources represent the objects being protected—documents, APIs, data records, etc. Resource Groups are the mechanism that connects resources to policies—each resource belongs to a group, and each group references a policy that governs access.
Scopes provide an optional phase that can further constrain access based on how the principal is accessing the system (PATs, federation, OAuth tokens, etc.).
These are the files you author and deploy.
These features span multiple phases and entity types.
Annotations are flexible key-value pairs that can be attached to many entity types, including roles, groups, scopes, resource groups, and resources. They support an inheritance hierarchy where more specific definitions override less specific ones, enabling powerful attribute-based access control patterns.
Every PDP decision produces an AccessRecord that captures the input PORC, the top-level decision, and details about each policy evaluated (MRN, cryptographic fingerprint, outcome, and phase). This normalized output enables compliance reporting, anomaly detection, forensic analysis, and policy replay across distributed systems.
The PolicyEngine is designed from the ground up to support the Principle of Least Privilege—granting principals only the minimum access necessary to perform their functions.
Default DENY: The PolicyEngine defaults to DENY. Access must be explicitly granted by policies. This means new principals start with zero access, and you consciously decide what to allow.
Start Strict, Iterate Based on Evidence: The recommended approach is to begin with restrictive policies and then iteratively expand access based on observed needs. The PolicyEngine's comprehensive audit capabilities make this practical:
This iterative approach transforms access control from guesswork into an evidence-based practice. Rather than granting broad permissions "just in case," you grant specific permissions based on demonstrated need.
Auditability Enables Least Privilege: Traditional systems often fail at least privilege because it's too difficult to understand what access is actually needed. The PolicyEngine's observable architecture—where every decision is recorded with full context—makes it practical to start strict and refine based on real data.
The PolicyEngine uses multi-phase evaluation to combine policies from different phases (operation, identity, resource, scope) dynamically for each request. All mandatory phases must contribute at least one GRANT for access to be granted, while phases are evaluated in parallel for performance. See Policy Conjunction for complete details.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |