Design-time schemas define the relationships, roles, and rules that describe who should be able to do what. Runtime permission checks apply those rules to real requests and return an allow or deny decision based on identity and context. The first sets the policy structure, while the second enforces it continuously inside the application.
Design-time policy structure vs runtime enforcement
Design-time authorization schemas define the rules of the system, such as which roles exist, what actions are allowed, and how relationships between subjects, resources, and conditions should be interpreted. They are a policy model, not a decision in themselves. Runtime permission checks are the enforcement point, where an actual request is evaluated against that model using the current identity, resource, action, and context. The distinction matters because a clean schema with weak enforcement still leaves the application open to broken access control.
Practitioners often get into trouble when they assume a well-designed policy model guarantees safe behaviour, but the real control is the request-time decision. In practice, many authorisation failures come from stale policy assumptions that were never re-evaluated when the application flow changed.
How the two layers work together
A design-time schema usually lives in code, configuration, or a policy service and expresses intent. Examples include role-based rules, relationship-based rules, attribute-based conditions, and the mapping between resource types and allowed operations. That layer is where teams decide whether the system should permit a manager to approve an expense, whether a support role can read a ticket, or whether a device may call a sensitive API.
Runtime checks consume that intent and apply it to a live request. They answer the operational question: should this caller, at this moment, with this context, be allowed to do this action on this resource? Good runtime enforcement checks more than the user’s nominal role. It also considers session state, tenancy, object ownership, request path, policy version, environment, and any other conditions the application treats as relevant.
- Design-time schemas are about policy definition and maintainability.
- Runtime checks are about decision correctness and continuous enforcement.
- One can exist without the other, but security only holds when both are aligned.
This is why authorization bugs often appear as implementation drift, not policy design failure. The schema may say “read-only,” while one endpoint forgets to call the decision layer or trusts a client-supplied role claim. For practical control design, OWASP’s OWASP API Security Top 10 is useful because broken authorization is usually exposed at the API boundary, where runtime checks must be explicit and consistent.
These controls tend to break down when teams duplicate authorization logic across many services because policy drift and endpoint-specific exceptions become hard to detect.
Where the distinction breaks in real systems
Tighter authorisation modeling often increases implementation overhead, because expressive schemas are only useful if every execution path evaluates them consistently. That creates a trade-off between policy sophistication and operational reliability. A minimal schema can be easier to enforce, while a highly expressive schema can better capture business rules but is easier to misapply if the application does not centralise checks.
There are also important edge cases. Some systems cache authorization decisions for performance, but cached decisions can become unsafe when role membership, object ownership, or session context changes quickly. Other systems use coarse preflight checks at the gateway and finer-grained checks inside the service; that pattern is sound only if the downstream service still performs its own enforcement for sensitive actions. Current guidance suggests treating gateway checks as a filter, not a substitute for application-level authorization.
For architecture teams, the main design question is whether the policy schema is the source of truth and whether every runtime path is actually bound to it. NIST SP 800-53 Rev. 5 helps here because access control, identification and authentication, and system integrity controls all depend on enforcement being real, not merely documented. For teams that need secure-by-default product behaviour, CISA’s Secure by Design guidance reinforces the expectation that strong defaults should not depend on developers remembering to add ad hoc checks.
In practice, the most common failure is not a missing policy model, but one request path, admin function, or background job that bypasses the runtime decision layer.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Agentic AI Top 10 address the attack and risk surface, while NIST CSF 2.0 and CIS Controls v8 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP Agentic AI Top 10 | Authorization and Access Control | Runtime permission checks are the enforcement layer for access decisions. |
| Recommendation — Centralize request-time authorization and verify every protected action is enforced. | ||
| NIST CSF 2.0 | PR.AC — Identity Management, Authentication and Access Control | The question concerns how access policy is defined and enforced. |
| Recommendation — Align policy definition with continuous enforcement and review access paths. | ||
| CIS Controls v8 | 6 — Access Control Management | Access control must be defined and enforced consistently at runtime. |
| Recommendation — Implement and test access controls on every path that changes state. | ||
Practitioner Guidance
What to prioritise: Make runtime enforcement the control you trust, and treat design-time schemas as the governed source of intent. If a policy cannot be evaluated on every protected request path, it is incomplete even if it looks correct on paper.
What to verify: Confirm that the same policy source is used across all enforcement points, including APIs, internal service calls, admin endpoints, and asynchronous jobs. Verify that decision inputs are current, especially for role changes, object ownership changes, and session revocation.
Common mistake: Do not assume that a front-end check, gateway rule, or static role matrix prevents access. Those mechanisms can improve usability and reduce noise, but they do not replace a live allow-or-deny decision at the point of action.
Practitioner takeaway: Good authorization is not the policy diagram itself, it is the discipline of making every meaningful request pass through a decision point that can still say no when context changes.
Related resources from NHI Mgmt Group
- What is the difference between request-time authorization checks and continuously maintained permission data?
- What is the difference between declarative authorization policies and embedding permission checks directly in application code?
- What is the difference between attack surface management and NHI governance?
- What is the difference between reviewing human access and reviewing NHIs?
Deepen Your Knowledge
Reviewed and updated by the NHIMG editorial team on September 14, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org