TL;DR: GitHub-style authorization can be modeled with SpiceDB and relationship-based access control, reducing complex org, team, and repository permissions to schema-driven checks that update as relationships change, according to Authzed. The practical lesson is that authorization design should be expressed in relationships and inheritance rules, not scattered across application logic.
At a glance
What this is: This is a technical walkthrough of modeling GitHub-style access with ReBAC, showing how org, team, and repository permissions can be reduced to schema-driven relationship checks.
Why it matters: IAM and IGA teams should pay attention because complex inheritance, role sprawl, and cross-object permissions are common in both human and non-human identity programmes.
Context
GitHub-style authorization becomes difficult when access is not attached to one object in isolation. Org ownership, team membership, repository roles, and inherited permissions all interact, which means a simple role list cannot capture the real decision path for access.
The article frames this as a ReBAC problem: permissions are derived from relationships between users, teams, organizations, and repositories, then evaluated at check time. That pattern matters to IAM and authorization architects because the same design pressure appears in platform admin access, SaaS tenant governance, and machine-to-resource permissions.
Key questions
Q: How should IAM teams model GitHub-style permissions in a ReBAC schema?
A: Start with the objects that actually carry access decisions, then define relationships between them and derive permissions from those relationships. In GitHub-style systems, that means modeling users, teams, organizations, and repositories separately, then letting inheritance and traversal determine who can act on what. The goal is to keep authorization logic declarative and testable.
Q: Why do transitive permissions create more risk than simple role assignment?
A: Because the effective access is determined by what a role expands into, not just by the role name itself. If a user gains access through team membership or organizational ownership, a small change in one place can widen access across many resources. That makes inheritance paths a governance concern, not just an implementation detail.
A: A common mistake is changing a relation or permission without tracing the full dependency graph. In relationship-based authorization, a single permission can depend on nested relations and other permissions across multiple definitions. Teams should identify all dependent relationships first, otherwise they risk overlooking downstream access effects that are not visible from the changed object alone.
Q: How do relationship updates keep access control accurate over time?
A: Access stays correct when the underlying relationships stay current. If a user joins a team, a repository moves under an organization, or access is revoked, the corresponding relationship tuple must change as well. That way, permission checks always reflect the current state rather than stale assumptions.
Technical breakdown
Why ReBAC fits GitHub-style permissions
Relationship-Based Access Control, or ReBAC, models access as links between subjects and resources rather than as flat role assignments. In the GitHub example, a user can inherit repository access through org ownership or team membership without being granted a permission on every repository. That makes permission evaluation dynamic: the schema defines how relationships resolve, and the application asks whether a subject can perform an action at check time. The practical value is that access logic becomes declarative, which is easier to reason about than scattered conditional code.
Practical implication: Model inherited access in schema, then evaluate permissions from relationships instead of hard-coding role logic in the application.
Why transitive permissions matter more than raw roles
The article shows that permissions are often defined in terms of other permissions. For example, clone can be granted through push, and repository permissions can traverse up to organization ownership through the arrow operator. This is the core ReBAC advantage: one relationship change can update multiple effective permissions without rewriting application logic. It also exposes a governance truth that IAM teams often miss. The real control surface is not the label on a role, but how that role expands through inheritance and object traversal.
Practical implication: Audit effective permissions, not just assigned roles, so inherited access does not silently widen privilege.
Why granularity should follow a real business boundary
The article argues that permission granularity should match actual operational distinctions, not theoretical future needs. If everyone who can configure one setting can also configure another, a single permission is enough. Separate permissions only become necessary when the product or governance model truly splits the access boundary, such as billing versus general administration. That is an important design principle for identity architects: over-granular schemas create maintenance drag, while under-granular schemas force risky rewrites later.
Practical implication: Define permissions around durable business boundaries and avoid creating artificial access splits that add complexity without control value.
NHI Mgmt Group analysis
Permission sprawl is fundamentally an authorization design problem, not an application code problem. The article shows that GitHub-style access can be represented cleanly when org, team, and repository relationships are modeled as first-class objects. That shifts the security decision from scattered conditionals to explicit policy structure, which is the right architectural center for IAM teams.
Relationship traversal is the real control plane in complex authorization systems. Once access can flow from organization to team to repository, the effective privilege surface is defined by inheritance, not by the most visible role label. Practitioners should treat transitive permissions as the thing being governed, because that is where access expands in ways operators often do not notice.
Granularity discipline matters more than permission count. The article makes the case that separate permissions should only exist when a genuine operational boundary exists, or when a future boundary is already certain. That is a useful design rule for both human IAM and machine authorization, because over-modeling creates policy debt while under-modeling creates rework.
Schema-driven authorization is the governance pattern that scales across application and identity teams. When the permission model is expressed in a schema, teams can review, test, and evolve access logic without embedding business rules throughout the codebase. For practitioners, the win is not just cleaner implementation, but a clearer governance layer for review, change control, and access analysis.
GitHub-style models validate ReBAC as a practical alternative to role-only thinking. ReBAC is not a niche pattern here. It is the mechanism that makes hierarchical ownership, team inheritance, and repository-specific access understandable at scale. IAM leaders should read that as a signal to model relationships first whenever access spans nested resources and delegated administration.
What this signals
Schema-driven authorization gives teams a cleaner boundary between policy and application code. When permissions are expressed as relationships, the access model can be reviewed and tested without hunting through conditionals in every service. That is especially useful when nested ownership or delegated administration creates access paths that are easy to miss in code review.
Effective access is the unit that matters, not the named role. A user who can inherit repository permissions through an organization or team may hold far more authority than a role label suggests. IAM programmes should therefore assess the resulting permission graph, not just the assigned entitlement list.
Granularity debt accumulates when teams model every UI option as a separate permission. The better test is whether two settings really differ in governance terms. If they do not, combine them until a clear business boundary justifies a split.
For practitioners
- Model inherited access as relationships Represent org membership, team membership, and repository binding as explicit tuples so effective access can be computed from structure rather than code.
- Define permissions from actions, not roles Use permissions such as clone, push, merge_pull_request, and manage_billing as the check points, then map roles onto those checks only where necessary.
- Audit effective access paths Review whether a user can reach sensitive repository actions through ownership, team membership, or nested parent relationships before approving the model.
- Keep granularity tied to business boundaries Split permissions only when the access boundary is real, such as billing versus general repository administration, or when the split is clearly coming in the product roadmap.
- Write relationship updates on every state change Create or delete relationship tuples when users join or leave teams, repositories are created, or access is revoked so the authorization graph stays current.
Key takeaways
- GitHub-style authorization works best when access is modeled as relationships that can be evaluated at check time rather than as hand-coded conditional logic.
- The main risk in permission sprawl is not the number of roles, but the hidden inheritance paths that expand effective access across nested objects.
- IAM teams should keep schemas aligned to real governance boundaries, then update relationship data whenever access changes so permissions stay accurate.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 addresses the attack and risk surface, while NIST CSF 2.0, NIST SP 800-53 Rev 5, CIS Controls v8 and NIST Zero Trust (SP 800-207) set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP Non-Human Identity Top 10 | NHI-05 — Overprivileged NHI | The article is about avoiding permission sprawl and excessive inherited access. |
| Recommendation — Map inherited access paths to NHI-05 and reduce any relationship that expands privilege without a clear need. | ||
| NIST CSF 2.0 | PR.AA-05 — Access Permissions, Entitlements and Authorizations | The core topic is how permissions and entitlements are defined and checked. |
| Recommendation — Use PR.AA-05 to review effective permissions, not just assigned roles, across nested resources. | ||
| NIST SP 800-53 Rev 5 | AC-6 — Least Privilege | Granularity and inheritance must preserve least privilege across repo and org boundaries. |
| Recommendation — Apply AC-6 to constrain inherited access so only necessary actions traverse the authorization graph. | ||
| CIS Controls v8 | CIS-5 — Account Management | Access changes are driven by joins, leaves, and role updates across teams and orgs. |
| Recommendation — Use CIS-5 to keep account and role changes synchronized with the relationship tuples that govern access. | ||
| NIST Zero Trust (SP 800-207) | Least privilege principle — Least privilege principle | ReBAC is being used to enforce context-aware access boundaries in a zero-trust style model. |
| Recommendation — Apply the least privilege principle to every traversal path that can expand repository access. | ||
Key terms
- Relationship-Based Access: An access model where entitlements are justified by the current business relationship, such as employee, contractor, student, vendor, or service account status. In practice, the relationship defines scope, duration, ownership, and review requirements.
- Permission Sprawl: Permission sprawl is the accumulation of unnecessary or outdated access across identities over time. In cloud and NHI environments, it grows through automation, rapid deployment, and weak offboarding, leaving more standing privilege than the business actually needs.
- Transitive Permission Check: A transitive permission check evaluates both direct permissions and permissions inherited through roles. This gives a more complete view of effective access, which is essential when entitlements can come from multiple paths. It helps teams verify what a person can actually do, not just what was assigned explicitly.
- Effective Access: The actual permissions an identity can exercise after inheritance, nested groups, delegation, and object-level controls are evaluated. In Active Directory, effective access is more useful than direct membership because it reveals the true operational reach of a service account.
Deepen your knowledge
NHI governance, agentic AI identity, and machine identity lifecycle are core topics in our NHI Foundation Level course, the industry's only accredited NHI security programme. If you are building or maturing an IAM programme, it is worth exploring.
Published by the NHIMG editorial team on June 10, 2026.
Updated on October 10, 2026.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org