How Discord Role Permission Overrides Work in a Channel
Which permission wins depends on the order Discord applies allows and denies, not on which role seems more important.
Is this your situation?
You set a deny on one role and an allow on another, and the channel result does not match either one alone. You want to know which one wins here.
What it is
A member's server-wide permissions come from adding up the allows for all of their roles together with the allows for @everyone. Channel permissions start from those server permissions as a base. From there, Discord applies denies of @everyone on the channel first. It then applies allows of @everyone on the channel. Denies for the specific member are applied next, after the role-level allows.
How Discord handles this
- Individual command permissions act as overrides to application-wide permissions.
- A user can accidentally lock themselves out of a command through these overrides.
- Server owners cannot lock themselves out of a command because they can access all commands in the server.
- A member can be denied a command by turning it off for @everyone.
- To avoid locking themselves out, grant yourself access to a command before denying it from @everyone.
Side by side
| Stage | What happens | Applies to |
|---|---|---|
| 1. Everyone deny | Denies of @everyone on the channel are applied first. | @everyone |
| 2. Everyone allow | Allows of @everyone on the channel are applied after the denies. | @everyone |
| 3. Role denies | All denies from a member's roles are summed and applied at once. | Member's roles |
| 4. Role allows | All allows from a member's roles are summed and applied at once. | Member's roles |
| 5. Member deny | A deny set for the specific member is applied if it exists. | Individual member |
| 6. Member allow | An allow set for the specific member is applied last if it exists. | Individual member |
Common mistakes
- Assuming role order in the list decides it You expect the higher role in the list to win.Why it happens: Readers expect the higher role to win.Already happened: You notice a role has less access than expected. Recover a Nuked Discord Server
- Denying @everyone on a command without granting first You turn off a command for @everyone before granting it to a role.Why it happens: Granting then denying in order prevents a user with the granted role from being locked out.
- Expecting owners or admins to be affected Owners cannot lock themselves out of a command because they access all commands.Why it happens: Readers assume the same rules apply to every role.
If this changes who is in control
You notice a channel's result does not match what a role was meant to have. Review how roles and channel overrides interact before changing one, using the owner vs admin breakdown.
Quick reference
| Term | Meaning |
|---|---|
| Server permission | Sum of allows from all of a member's roles plus @everyone. |
| Channel permission base | Starts from the member's server permissions. |
| Everyone deny stage | Applied first in the channel. |
| Everyone allow stage | Applied after everyone denies. |
| Role deny stage | All role denies summed and applied together. |
| Role allow stage | All role allows summed and applied together. |
| Member deny stage | Applied after role allows, if it exists. |
| Member allow stage | Applied last, if it exists. |
Frequently asked questions
Why does a role-level deny lose to another role's allow?
All the allows of a member's roles are summed up and applied at once after the role denies.
Can a specific member override have the final say?
Allows for a specific member are applied last if they exist.
Does the @everyone role ever matter if I have other roles?
An individual's server-wide permissions add up the allows for roles assigned to them plus the allows for @everyone.
Keeping track of who has access
Confusion over who can access a channel builds as roles, channel overrides and member-level changes pile up over time. Delvia keeps a clear picture of which stage is granting or denying access, so the result is never a mystery.
Was this helpful?