# Users, roles, and permissions

Access in kixctl is verb-level. Every action — `instance.create`, `snapshot.restore`, `pool.promote`, `instance.delete`, and the rest — is a discrete permission, checked at the point the action runs. A role is a named group of permissions.

## Seeded roles

- **super_admin** — bypasses every gate.
- **operator** — every lifecycle and management verb except the destructive deletes.
- **viewer** — read-only.

## Managing users

Users are managed under the admin-only **Users** surface, gated on `user.manage`. Create a user, assign one or more groups (roles), and grant per-user exception permissions on top of the group where someone needs a single extra verb without a new role. A new user defaults to the lowest group, `viewer`.

## The last-super-admin invariant

At least one super admin must always exist. The last one cannot be deleted or demoted — the delete is refused before any delete machinery runs, so the account and its roles are never partially torn down.

## Scope

Access is verb-level across the cluster. Per-object scoping — restricting a user to specific instances — is not part of this tier; it belongs to the enterprise governance direction.
