alepha@docs:~/docs/reference/primitives$
cat $permission.md | pretty
2 min read

#$permission

#Import

typescript
1import { $permission } from "alepha/security";

#Overview

Create a new permission.

#⚠️ A permission's id is group:name, and it is a stable string

Whatever grants this permission - a role, a stored profile, a per-resource rank - stores that string. So group and name are an external identity, not a label: renaming either one silently re-points every grant that held the old string, and nothing anywhere goes red.

The corollary is that an id must never be DERIVED from position. A catalogue that numbers its permissions by their index in an array re-maps every stored grant the moment somebody inserts one in the middle - and the grants that move are not the ones being edited. This has a worked example: a club whose receptionists woke up able to delete tournaments.

Say what the permission is called with PermissionPrimitiveOptions.label; that is the string a reader sees, and it can be changed freely.

#Options

Option Type Required Description
name string No Name of the permission
group string No Group of the permission
description string No Describe the permission.
label string No Translation key for this permission's human-readable name
groupLabel string No Translation key for the human-readable name of this permission's GROUP
groupOrder number No Where this permission's group sits in a matrix