Overview

A custom, always-on permission layer that fully replaces Discord's native permission checks for Azra's commands and dashboard pages.

Azra ignores Discord permissions For every gated command, Azra does not look at Discord's "Manage Server", "Ban Members", "Administrator", or any channel/role permission. The only thing that decides who can act is the grants you set here. This means access is consistent, auditable, and independent of your Discord role setup.

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.

Always enforced — there is no on/off switch The permission system is a permanent part of how Azra works. You can't disable it; you configure it. On a brand-new server, the server owner and Discord administrators already have full access; grant your staff the modules they need so non-admins can help too — so setting this up is one of the first things to do.
How It Works

Every time someone runs a command or opens a dashboard page, Azra resolves their effective access from your grants.

The three kinds of command

KindExamplesWho 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 giveawayEveryone. These bypass the permission system entirely and can never be denied.
UncataloguedAnything not in Azra's command catalogueLocked 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:

Example Denying 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:

StoreHolds
perm_module_grantsOne row per (subject → module) grant. subject_type is user or role.
perm_command_overridesOne 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.

Configuring Permissions

Everything is managed from the dashboard's Permissions Manager page — no commands required.

Clearing someone quickly In the "Members & roles with grants" list, click the on any chip to stage removal of all of that subject's grants and overrides in one step.
Required Permissions

Two separate things: who is allowed to manage permissions, and what Discord permissions the bot itself still needs.

Who can manage permissions

RoleWhat they can do
Server ownerFull 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 holderA 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 elseNo access to the Permissions Manager page.
Discord Administrators get full bot access automatically A member with Discord's Administrator permission is treated like the owner on the bot side — they can run every gated command with no grant needed, and a deny can't block them. They don't need anything from this page to use the bot. One subtlety: automatic bot-command access keys off Administrator, while dashboard-page access keys off Manage Server. So a member who has Manage Server but not Administrator can still open and configure the dashboard, yet needs a module grant (e.g. 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:

Example Granting a moderator the 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.
Role & User Assignments

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).

Roles that can't be granted to The picker hides @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).
Module-Specific Permissions

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 keyUnlocks
moderationwarn, 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_loggingThe central Logging dashboard page & routing
automodAI Auto-Moderation configuration
antispamAnti-Spam and copy-paste-guard configuration
analyticsThe /stats command & the Analytics dashboard
welcome/welcome commands & the Welcome/Goodbye designer
ticketsClaiming, assigning, status & priority, transferring between departments, internal notes, adding/removing members, & the Tickets dashboard. Each is a separate capability
reaction_rolesThe /reactionroles command & the panel builder
anti_nukeAnti-Nuke configuration & nuke-event log
raid_protectionRaid-protection configuration
captchaCaptcha & account-age verification configuration
server_recoveryThe /snapshot command, snapshots & deletion-recovery
bot_detectionBot-detection configuration & flags
sticky_messagesThe /sticky command & the Sticky Messages page
ghost_pingThe /ghostping command & the Ghost Ping page
levelingThe Leveling dashboard (XP rates, level roles, rank cards). Note: /rank, /leaderboard and /setbg are public — no grant needed.
social_integrationsThe /socials command & the Twitch/YouTube manager
giveawaysCreating & managing giveaways (the /giveaway command, the ⚙️ Manage panel, & the dashboard). Entering a giveaway is always public.
brandingPer-server branding & the bot nickname
channelsCreating, editing & deleting channels and webhooks from the dashboard
manage_permissionsThe Permissions Manager itself — the keys-to-the-kingdom capability (owner/admin only to grant)
Paused modules disappear here If Azra's operators temporarily pause a module for maintenance, it's hidden from the editor and can't be granted. Any existing grants on it are preserved untouched and simply reappear once the module is re-enabled — a short note at the top of the page tells you when something is hidden for this reason.
Inheritance & Overrides

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

StateMeaning
Inherit (default)Follow the module: if the module is granted the command is allowed; if not, it's denied. No override is stored.
AllowForce the command on for this subject, even if the module isn't granted. Great for handing out a single command.
DenyForce 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:

#CheckResult
1Is it a public / self-service command?✅ Always allowed
2Is the member the server owner?✅ Always allowed
3Is the member a Discord Administrator?✅ Always allowed (full access, like the owner)
4Any Deny override across their user + roles?⛔ Denied — deny always wins (for non-admins)
5Any Allow override across their user + roles?✅ Allowed
6Any module grant covering the command?✅ Allowed
7None of the above⛔ Denied
The one rule to remember: Deny > Allow > Module grant. A deny anywhere (on the user or any of their roles) beats every allow and every module grant. This makes it safe to grant broadly at the role level and subtract precise exceptions. The server owner and Discord Administrators sit above this entirely — a deny doesn't apply to them, so use it to restrict non-admin staff.

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).

Delegation & Role Hierarchy

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:

GuardrailWhy
Can only grant modules they hold themselvesThey can re-delegate their own powers but never hand out (or self-grant) a module above their level.
Cannot grant or revoke manage_permissionsOnly 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 roleMirrors Discord's own hierarchy — you can't edit a role at or above your own.
Cannot manage the role that grants them their accessStops a manager editing or deleting the very role that gives them power.
Cannot clear a subject that holds manage_permissionsOne manager can't strip another manager's (or the owner's) access.
The owner is never at risk The server owner always keeps full access and is exempt from every guardrail above — there is no configuration, delegated manager, or mistake that can lock the owner out.
Common Setups

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.

Best Practices

A few habits that keep permissions simple and secure as your server grows.

Troubleshooting

The usual culprits when access doesn't behave as expected.

SymptomLikely 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.
FAQ

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.