This repository was archived by the owner on May 10, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
API Permission
Legends11 edited this page Apr 18, 2026
·
1 revision
← Home
The permission system provides a two-tier access control layer:
-
Storage (
macro:engine permissions) — persistent, works for offline players -
Entity tag (
perm.<name>) — runtime fast lookup (online players only)
macro.admin tag always bypasses all permission checks.
| Function | Input | Description |
|---|---|---|
perm/grant |
{player, perm} |
Grant permission — writes to storage + adds entity tag |
perm/revoke |
{player, perm} |
Revoke permission — clears storage + removes entity tag |
perm/clear |
{player} |
Remove all permissions for a player |
perm/has |
{player, perm} |
Returns macro:output {result:1b/0b}
|
perm/check |
{player, perm} |
Guard — return 0 if no permission |
perm/run |
{player, perm, cmd} |
Run command if player has permission (entity tag, online) |
perm/exec |
{player, perm, cmd} |
Run command if player has permission (storage, offline-safe) |
perm/list |
{player} |
Display permission list to macro.debug players |
grant,revoke,clearcan only be called by players with themacro.admintag.
# Grant a permission
data modify storage macro:input player set value "Steve"
data modify storage macro:input perm set value "mypack.open_shop"
function macro:api/perm/grant with storage macro:input {}
# Check permission (guard)
data modify storage macro:input player set value "Steve"
data modify storage macro:input perm set value "mypack.open_shop"
execute unless function macro:api/perm/check run return 0
# ... rest of function only runs if Steve has the permission
# Check permission (query)
function macro:api/perm/has with storage macro:input {}
execute if data storage macro:output {result:1b} run function mypack:shop/openAllows players to use /trigger <name> set <value> — macroEngine performs the permission check before running the bound function.
| Function | Input | Description |
|---|---|---|
perm/trigger/bind |
{name, value, func, perm} |
Bind trigger value to function with permission requirement |
perm/trigger/bind_cmd |
{name, value, cmd, perm} |
Bind trigger value to command with permission requirement |
perm/trigger/enable |
{player, name, perm} |
Enable trigger for a player (with permission check) |
perm/trigger/unbind |
{name, value} |
Remove all binds for a specific value |
perm/trigger/clear |
{name} |
Remove all binds for a trigger |
# Setup: bind trigger value 1 to open the shop, requiring "mypack.shop" permission
data modify storage macro:input name set value "mypack_actions"
data modify storage macro:input value set value 1
data modify storage macro:input func set value "mypack:shop/open"
data modify storage macro:input perm set value "mypack.shop"
function macro:api/perm/trigger/bind with storage macro:input {}
# Enable for a player
data modify storage macro:input player set value "Steve"
data modify storage macro:input name set value "mypack_actions"
data modify storage macro:input perm set value "mypack.shop"
function macro:api/perm/trigger/enable with storage macro:input {}Player usage:
/trigger mypack_actions set 1
If Steve has mypack.shop permission → mypack:shop/open runs.
If not → error message shown to Steve.
macro:engine
├── permissions
│ └── Steve: ["mypack.open_shop", "mypack.admin"]
│
├── perm_triggers
│ └── mypack_actions: [{value:1, func:"mypack:shop/open", perm:"mypack.shop"}]
│
└── perm_trigger_names
└── [{name:"mypack_actions"}]