> ## Documentation Index
> Fetch the complete documentation index at: https://bloodhound.specterops.io/llms.txt
> Use this file to discover all available pages before exploring further.

# GH_HasRole

> User or team has a role assignment (org role, team role, or repo role)

<img noZoom src="https://mintcdn.com/specterops/tTIczgde9H07oLXf/assets/enterprise-AND-community-edition-pill-tag.svg?fit=max&auto=format&n=tTIczgde9H07oLXf&q=85&s=ad49a576589f4d2a8081df77d07fdf56" alt="Applies to BloodHound Enterprise and CE" width="482" height="45" data-path="assets/enterprise-AND-community-edition-pill-tag.svg" />

## Edge Schema

* Source: [GH\_User](/opengraph/extensions/github/nodes/gh_user), [GH\_Team](/opengraph/extensions/github/nodes/gh_team)
* Destination: [GH\_OrgRole](/opengraph/extensions/github/nodes/gh_orgrole), [GH\_RepoRole](/opengraph/extensions/github/nodes/gh_reporole), [GH\_TeamRole](/opengraph/extensions/github/nodes/gh_teamrole)
* Traversable: ✅

## General Information

The traversable GH\_HasRole edge represents the assignment of a user or team to a specific role within the organization, repository, or team. This is the primary edge for connecting identities to their permissions and serves as the foundation of all access paths in the GitHub permission model. Because role assignment is the starting point for determining what a principal can do, this edge is traversable and critical for attack path analysis.

```mermaid theme={null}
graph LR
    user1("GH_User alice")
    user2("GH_User bob")
    team1("GH_Team security-team")
    orgRole("GH_OrgRole SpecterOps\\Owners")
    repoRole("GH_RepoRole GitHound\\write")
    teamRole("GH_TeamRole security-team\\maintainer")
    user1 -- GH_HasRole --> orgRole
    user2 -- GH_HasRole --> repoRole
    team1 -- GH_HasRole --> repoRole
    user1 -- GH_HasRole --> teamRole
```
