Permissions
Permissions are the foundation of access control in HyperPerms. This guide explains what permission nodes are, how they work, and best practices for using them.
What is a Permission Node?
A permission node is a string that represents a specific action or feature that can be granted or denied. Permission nodes follow a hierarchical naming convention that makes them easy to organize and manage.
# Example permission nodes
chat.use # Ability to use chat
teleport.home # Ability to teleport home
mod.kick # Ability to kick players
build.place # Ability to place blocksPermission Node Format
Permission nodes typically follow this pattern:
<plugin>.<category>.<action>
Examples:
hyperperms.user.info # HyperPerms user info command
worldedit.selection.wand # WorldEdit wand selection
essentials.fly # Essentials fly commandNaming Conventions
- Use lowercase letters only
- Separate parts with dots (
.) - Be specific and descriptive
- Group related permissions under common prefixes
Permission Values
Each permission can have one of three states:
- true - Permission is granted
- false - Permission is explicitly denied
- undefined - Permission is not set (will inherit or default)
# Grant a permission
/hp group addpermission admin mod.kick true
# Deny a permission
/hp group addpermission guest build.place false
# The difference matters for inheritance!True vs Undefined
Understanding the difference between true and undefined is important:
- A
truepermission explicitly grants access - An undefined permission will check parent groups (inheritance)
- If still undefined after inheritance, plugins typically deny access
Negating Permissions
Setting a permission to false explicitly denies it, even if it would be granted by inheritance:
# Admin inherits from Mod, which has mod.* (all mod permissions)
# But we want to deny ban specifically for Admin
/hp group addpermission admin mod.ban false
# Admin now has all mod.* EXCEPT mod.banWildcards
Wildcards allow you to grant multiple permissions at once using the *character.
Partial Wildcards
# Grant all teleport permissions
/hp group addpermission vip teleport.* true
# This grants:
# - teleport.home
# - teleport.spawn
# - teleport.player
# - teleport.warp
# - (any other teleport.* permission)Full Wildcard
# Grant ALL permissions
/hp group addpermission owner * true
# This grants every single permission!*) grants every permission. Only use it for the most trusted rank (usually owner/admin). Even then, consider whether it's really necessary.Wildcard Behavior
Wildcards are expanded at check time, not when set. This means:
- New permissions added by plugins are automatically included
- You can still override specific permissions within a wildcard
- Explicit values take priority over wildcard matches
# Grant all mod permissions
/hp group addpermission mod mod.* true
# But deny ban specifically
/hp group addpermission mod mod.ban false
# mod.ban = false (explicit), all other mod.* = true (wildcard)Permission Inheritance and Resolution
When checking if a player has a permission, HyperPerms follows this order:
- User-specific permissions - Highest priority
- User's primary group - Second priority
- User's other groups - By weight (highest first)
- Inherited group permissions - Following the inheritance chain
- Default value - If nothing is set
Learn more in the inheritance guide.
Context-Specific Permissions
Permissions can be restricted to specific contexts like worlds or gamemodes:
# Permission only applies in the "creative" world
/hp group addpermission builder build.* true world=creative
# Permission only applies in survival gamemode
/hp group addpermission default pvp.enable true gamemode=survivalLearn more in the contexts guide.
Common Permission Patterns
Tiered Access
# Basic tier
home.use # Can use /home
home.set # Can set home
# Premium tier
home.multiple # Can have multiple homes
home.unlimited # No limit on homesModeration Levels
# Helper
mod.warn # Can warn players
# Moderator
mod.kick # Can kick players
mod.mute # Can mute players
# Admin
mod.ban # Can ban players
mod.ban.permanent # Can permanently banFeature Toggles
# Bypass permissions
cooldown.bypass # Skip command cooldowns
filter.bypass # Bypass chat filter
limit.bypass # Bypass various limitsBest Practices
Do
- Use descriptive, hierarchical permission names
- Document what each permission does
- Use inheritance to avoid repetition
- Test permissions after making changes
- Use the verbose command to debug issues
Don't
- Give
*to untrusted players - Use too many negated permissions
- Forget to test after changes
- Create overly complex permission structures
Debugging Permissions
If a permission isn't working as expected:
# Enable verbose mode to see all permission checks
/hp verbose
# Check a specific player's permissions
/hp user info <player>
# Test a specific permission
/hp check <player> <permission>See Also
- Groups - How to organize permissions
- Inheritance - Permission inheritance system
- Contexts - World and gamemode-specific permissions
- Permission Reference - HyperPerms' own permissions