Permission Manager
Decide exactly who can use each part of Azra — grant modules and fine-tune individual commands for specific members and roles, without ever touching Discord permissions.
A custom, always-on permission layer that fully replaces Discord's native permission checks for Azra's commands and dashboard pages.
The Permission Manager lets you answer two questions for every member and every role in your server:
Which modules can they use?
A module grant unlocks a whole feature — e.g. granting moderation lets someone use every moderation command and open the Moderation dashboard page.
Which individual commands are allowed or denied?
A per-command override carves an exception into a module — e.g. grant moderation but deny ban, or leave the module off and allow just warn.
Every time someone runs a command or opens a dashboard page, Azra resolves their effective access from your grants.
The three kinds of command
| Kind | Examples | Who can use it |
|---|---|---|
| Gated | /mod ban, /mod warn, /giveaway, /welcome, Quick Ban (right-click) | The server owner & Discord administrators (full access by default), plus anyone with a matching module grant or an explicit allow override. |
| Public / self-service | /rank, /leaderboard, /ping, /help, entering a giveaway | Everyone. These bypass the permission system entirely and can never be denied. |
| Uncatalogued | Anything not in Azra's command catalogue | Locked to the owner & admins (fail-safe) — a command shipped without a catalogue entry is denied rather than silently public. |
All surfaces of a command are treated as one
A command can be invoked several ways — a slash command, a text/prefix command, a right-click context menu, or a message button. Azra groups every surface of the same capability under one action, so a grant or a denial always spans all of them:
ban blocks /mod ban, the !ban prefix command, and the "Quick Ban" right-click menu — all at once. A member can never dodge a restriction by switching from slash to prefix.
Under the hood
Grants are stored per-server as two small tables — module grants and per-command overrides. The set of modules and commands (the "catalogue") is defined in Azra's code, so it always matches the bot exactly; the database only stores your grants:
| Store | Holds |
|---|---|
perm_module_grants | One row per (subject → module) grant. subject_type is user or role. |
perm_command_overrides | One row per (subject → command) override, with effect = allow | deny. No row means "inherit from the module". |
Resolution is cached for a few minutes and refreshed instantly when you save a change, so grants take effect within seconds. If Azra can't read the permission data (e.g. a brief database hiccup), it fails closed — access is denied rather than accidentally opened.
Everything is managed from the dashboard's Permissions Manager page — no commands required.
-
1Open the Permissions Manager
Go to Dashboard → your server → Permissions Manager (the
key icon in the sidebar). It's visible to the server owner, Discord admins, and anyone you've given the Manage Permissions capability. -
2Pick a user or a role
Use the Users tab to search a member by name, or the Roles tab to choose a role. Roles are almost always the better choice — grant a role once and every member who has it inherits the access.
-
3Toggle the modules they should have
The editor lists every available module with an on/off switch. Flip on the modules this person or role needs. Each module shows how many commands it contains and can be expanded to fine-tune them.
-
4Fine-tune individual commands (optional)
Expand a module to see its commands. Each has a three-way control — Inherit (follow the module grant), Allow (force on), or Deny (force off). Use these only when you need an exception; most setups never touch them.
-
5Save your changes
Edits are staged in a sticky Save changes bar at the bottom — nothing is written until you click Save (or Discard to revert). This lets you set up a full staff role in one pass. You'll be warned before leaving with unsaved changes.
Two separate things: who is allowed to manage permissions, and what Discord permissions the bot itself still needs.
Who can manage permissions
| Role | What they can do |
|---|---|
| Server owner | Full control. Always has every module, can grant/revoke anything (including Manage Permissions), and can never be locked out. |
| Discord admin (Manage Server) | Full control of the Permissions Manager on the dashboard, exactly like the owner. (For automatic bot-command access, see the admin note below.) |
| Manage Permissions holder | A delegated staff member you've granted the manage_permissions module. They can open this page and manage grants — within the safety limits described in Delegation & Hierarchy. |
| Everyone else | No access to the Permissions Manager page. |
moderation) to run the matching commands — grant them the modules they need, or give them Administrator.
What the bot itself needs
The Permission Manager decides who may ask Azra to do something. Azra still needs its own Discord permissions to actually carry it out:
moderation module lets them run /mod ban. The ban only succeeds if Azra's own role has Discord's Ban Members permission and sits above the target in the role hierarchy. If a command silently fails, check the bot's permissions, not the member's.
Grants are attached to a "subject" — either a role or a specific user. A member's access is the union of both.
Role grants (recommended)
Attach access to a role once; everyone with that role inherits it, and it updates automatically as you add/remove the role from members. Perfect for a "Moderator" or "Giveaway Host" role.
User grants
Attach access to one specific person. Best for one-off exceptions — e.g. a trusted community member who should host giveaways without joining the staff role.
How a member's access is combined
A member's effective permissions are the union of their own user grants plus the grants on every role they hold. If any of those sources grants a module or allows a command, they have it — unless something explicitly denies it (see Inheritance & Overrides).
@everyone and managed/integration roles (bot roles, Nitro Booster, Twitch/Top.gg roles, etc.) — granting a bot module to those is meaningless. Delegated managers additionally only see roles below their own (see below).
Each feature of Azra is a module. Granting a module unlocks both its bot commands and its dashboard configuration page.
Some modules are command-driven, some are configured purely from the dashboard, and some are both. A module grant covers whichever surfaces the module has:
| Module key | Unlocks |
|---|---|
moderation | warn, warnings, kick, ban, unban, timeout, tempban, temprole, purge, nickname, lock, unlock, lockdown, slowmode, massmod; the punishment actions (softban, tempkick, jail, unjail, blacklist, unblacklist, lock_user, unlock_user); the case actions (case_view, case_note, case_edit, case_undo, escalation_preview); the voice actions (voice_mute, voice_unmute, voice_deafen, voice_undeafen, voice_move, voice_disconnect); the Quick Ban/Kick/Timeout right-click menus, and the prefix equivalents |
mod_logging | The central Logging dashboard page & routing |
automod | AI Auto-Moderation configuration |
antispam | Anti-Spam and copy-paste-guard configuration |
analytics | The /stats command & the Analytics dashboard |
welcome | /welcome commands & the Welcome/Goodbye designer |
tickets | Claiming, assigning, status & priority, transferring between departments, internal notes, adding/removing members, & the Tickets dashboard. Each is a separate capability |
reaction_roles | The /reactionroles command & the panel builder |
anti_nuke | Anti-Nuke configuration & nuke-event log |
raid_protection | Raid-protection configuration |
captcha | Captcha & account-age verification configuration |
server_recovery | The /snapshot command, snapshots & deletion-recovery |
bot_detection | Bot-detection configuration & flags |
sticky_messages | The /sticky command & the Sticky Messages page |
ghost_ping | The /ghostping command & the Ghost Ping page |
leveling | The Leveling dashboard (XP rates, level roles, rank cards). Note: /rank, /leaderboard and /setbg are public — no grant needed. |
social_integrations | The /socials command & the Twitch/YouTube manager |
giveaways | Creating & managing giveaways (the /giveaway command, the ⚙️ Manage panel, & the dashboard). Entering a giveaway is always public. |
branding | Per-server branding & the bot nickname |
channels | Creating, editing & deleting channels and webhooks from the dashboard |
manage_permissions | The Permissions Manager itself — the keys-to-the-kingdom capability (owner/admin only to grant) |
Command overrides are how you make exceptions to a module grant. Understanding the precedence is the key to the whole system.
The three states of a command
| State | Meaning |
|---|---|
| Inherit (default) | Follow the module: if the module is granted the command is allowed; if not, it's denied. No override is stored. |
| Allow | Force the command on for this subject, even if the module isn't granted. Great for handing out a single command. |
| Deny | Force the command off for this subject, even if the module is granted. Great for carving one dangerous command out of a role. |
Resolution order (highest priority first)
When a member runs a command, Azra checks, in order:
| # | Check | Result |
|---|---|---|
| 1 | Is it a public / self-service command? | ✅ Always allowed |
| 2 | Is the member the server owner? | ✅ Always allowed |
| 3 | Is the member a Discord Administrator? | ✅ Always allowed (full access, like the owner) |
| 4 | Any Deny override across their user + roles? | ⛔ Denied — deny always wins (for non-admins) |
| 5 | Any Allow override across their user + roles? | ✅ Allowed |
| 6 | Any module grant covering the command? | ✅ Allowed |
| 7 | None of the above | ⛔ Denied |
Worked example
Suppose your @Trial Mod role is set up like this:
Subject: role @Trial Mod
module "moderation" = granted (all mod commands inherit → allowed)
command "ban" = Deny (override: force off)
command "kick" = Deny (override: force off)
command "lockdown" = Deny (override: force off)
A member with only @Trial Mod can /mod warn, /mod timeout, /mod purge and /channel slowmode (inherited from the module) but is blocked from /mod ban, /mod kick and /channel lockdown — on every surface, including the right-click menus. Give them the senior @Mod role later (no denies) and they immediately gain the full set, because that role's grant has nothing subtracting from it.
Allow without the module
The reverse pattern hands out a single command with no module access:
Subject: user @Helper
module "moderation" = not granted
command "warn" = Allow (override: force on)
@Helper can use /mod warn (and !warn) but nothing else in moderation, and never sees the Moderation dashboard page (that needs the module grant).
You can safely let trusted staff manage permissions themselves — Azra enforces guardrails that stop them from escalating their own power.
Grant a staff member (or role) the manage_permissions module and they can open the Permissions Manager. To prevent privilege escalation, a delegated manager (anyone who isn't the owner or a Discord admin) is bound by these rules — all enforced on the server, not just hidden in the UI:
| Guardrail | Why |
|---|---|
| Can only grant modules they hold themselves | They can re-delegate their own powers but never hand out (or self-grant) a module above their level. |
Cannot grant or revoke manage_permissions | Only the owner/admin can mint or remove other permission managers — the keys to the kingdom stay at the top. |
| Can only manage roles below their own highest granting role | Mirrors Discord's own hierarchy — you can't edit a role at or above your own. |
| Cannot manage the role that grants them their access | Stops a manager editing or deleting the very role that gives them power. |
Cannot clear a subject that holds manage_permissions | One manager can't strip another manager's (or the owner's) access. |
Recipes you can copy. All of these use role grants — set the role up once and assign it to your team.
Full Moderator
Role @Mod → grant moderation + mod_logging. Every mod command, plus the ability to configure logging.
Trial Moderator
Role @Trial Mod → grant moderation, then Deny ban, kick, lockdown, massmod. Warns and timeouts only.
Giveaway Host
Role @Host → grant giveaways. They can create, edit and manage giveaways without any Discord permissions.
Support Team
Role @Support → grant tickets. They can claim tickets and add/remove members. Closing a ticket is always open to its opener.
Community Manager
Role @CM → grant welcome, reaction_roles, social_integrations, leveling, analytics. Runs engagement without mod power.
Head of Staff (delegated admin)
Role @Head Mod → grant manage_permissions + the modules they oversee. They can then manage grants for roles below theirs. Owner/admin only can assign this.
A few habits that keep permissions simple and secure as your server grows.
-
Grant to roles, not people
Attach access to a "Moderator" / "Host" / "Support" role and assign the role in Discord. It scales, self-documents, and updates automatically as your team changes. Reserve user grants for genuine one-offs.
-
Grant the whole module, subtract with Deny
It's cleaner to grant
moderationand deny the two commands a junior shouldn't touch than to allow ten commands one by one. Because deny always wins, the carve-outs are guaranteed. -
Hand out Manage Permissions sparingly
It's the most powerful capability. Give it only to your most senior staff, and remember delegated managers are still boxed in by role hierarchy and can only re-share modules they already hold.
-
Mirror your Discord role hierarchy
Keep senior staff roles positioned above junior ones in Discord. Delegated managers can only manage roles below their own, so a clean hierarchy makes delegation intuitive.
-
Review the subjects list periodically
The "Members & roles with grants" panel is your at-a-glance audit. Clear anyone who's left the team, and confirm no user grant has quietly outlived its purpose.
The usual culprits when access doesn't behave as expected.
| Symptom | Likely cause & fix |
|---|---|
| Staff member gets "Permission Denied" on a command they should have | They have no module grant and no allow override — or a Deny on one of their roles is overriding it (deny always wins). Check every role they hold, not just their staff role. |
A staffer with Manage Server (but not Administrator) can't run /mod ban |
Automatic bot access requires the full Administrator permission (or being the owner) — Manage Server alone isn't enough. Either grant that staffer's role the moderation module, or give them the Administrator permission. |
| Command is allowed but silently does nothing | That's a bot permission problem, not a Permission Manager one. Ensure Azra's own Discord role has the needed permission (e.g. Ban Members) and sits above the target in the hierarchy. |
| A change didn't seem to apply | Make sure you clicked Save changes in the sticky bar — edits are staged until saved. Grants then take effect within a few seconds (up to a few minutes if the bot was briefly unreachable). |
| A role is missing from the picker | @everyone and managed/integration roles are hidden by design. If you're a delegated manager, roles at or above your own are also hidden — ask the owner/admin to handle those. |
| A module you expected isn't listed | It's been paused by Azra's operators for maintenance (a note explains this at the top of the page). Existing grants are preserved and it returns automatically. |
| Everyone is denied everything at once | Azra fails closed during a database issue. This is temporary — access restores automatically once the connection recovers. The owner is affected too, so it's easy to spot. |
Quick answers to the most common questions.
Does this replace Discord permissions?
For Azra's gated commands and dashboard, yes — Azra ignores Discord permissions entirely and uses only your grants. Your Discord permissions still govern everything else in your server (who can send messages, manage channels manually, etc.).
Can I turn the permission system off?
No — it's always enforced. There's no per-server switch. On a fresh server, grant your staff the modules they need so they don't lose access; the owner and Discord Administrators always retain full control in the meantime.
Do Discord admins need to be granted anything?
No. A member with the Discord Administrator permission is treated like the owner — they have every module by default and can run any gated command with no grant (a deny can't block them either). Grants exist for handing precise access to non-admin staff. Note that Manage Server on its own doesn't grant automatic command access — only full Administrator does — though Manage Server is still enough to open and configure the dashboard.
What can new members / regular users do without any grant?
Only the public, self-service commands: /rank, /leaderboard, /setbg, /ping, /help, the !prefix viewer, and entering giveaways. Everything else needs a grant.
If I grant a module, does that give dashboard access too?
Yes. A module grant unlocks both the module's bot commands and its configuration page on the dashboard. That's why a config-only module like welcome or analytics is worth granting even though its dashboard page is the main way to use it.
User grant and role grant conflict — which wins?
They combine (union), and then the deny rule applies: a Deny on either the user or any of their roles wins over any allow or module grant. Otherwise, an allow/grant from any source is enough.
Can a staff member grant themselves more power?
No. A delegated manager can only grant modules they already hold, can't touch manage_permissions, and can't manage roles at or above their own. Only the owner or a Discord admin can hand out the top-level capability.
Do denies cover right-click and text commands too?
Yes. Overrides apply to the whole capability, so denying ban blocks the slash command, the !ban prefix command, and the Quick Ban context menu together — no surface can be used to bypass it.
What happens to grants if I remove a role or the person leaves?
Role grants simply stop applying to anyone who no longer has the role — the grant stays on the role for whoever keeps it. If you delete a role in Discord, its grants are cleaned up. User grants persist until you clear them from the subjects list.