# Permissions reference

Permissions are **dynamic**. Modules register their permissions at boot via
`UserPermissionService::registerBatch()`. Never hard-code role names in code —
check permissions.

## Sprint 1 permissions

| Permission              | Group       | Admin | Manager | Store Keeper | Salesman | Accountant |
|-------------------------|-------------|:-----:|:-------:|:------------:|:--------:|:----------:|
| `dashboard.view`        | dashboard   |   ✓   |    ✓    |      ✓       |    ✓     |     ✓      |
| `settings.view`         | settings    |   ✓   |    ✓    |      —       |    —     |     ✓      |
| `settings.company`      | settings    |   ✓   |    ✓    |      —       |    —     |     —      |
| `settings.preferences`  | settings    |   ✓   |    ✓    |      —       |    —     |     ✓      |
| `settings.theme`        | settings    |   ✓   |    ✓    |      —       |    —     |     —      |
| `settings.printer`      | settings    |   ✓   |    ✓    |      —       |    —     |     —      |
| `settings.security`     | settings    |   ✓   |    —    |      —       |    —     |     —      |
| `users.view`            | users       |   ✓   |    ✓    |      —       |    —     |     —      |
| `users.manage`          | users       |   ✓   |    ✓    |      —       |    —     |     —      |
| `roles.view`            | roles       |   ✓   |    ✓    |      —       |    —     |     —      |
| `roles.manage`          | roles       |   ✓   |    —    |      —       |    —     |     —      |
| `audit.view`            | audit       |   ✓   |    —    |      —       |    —     |     ✓      |
| `notifications.view`    | system      |   ✓   |    ✓    |      ✓       |    ✓     |     ✓      |
| `search.use`            | system      |   ✓   |    ✓    |      ✓       |    ✓     |     ✓      |

Admin always passes via `Gate::before`. System roles cannot be deleted or
renamed.

## Adding permissions in later sprints

```php
$permissions->registerBatch([
    ['name' => 'products.view',   'group' => 'products', 'label' => 'View products'],
    ['name' => 'products.manage', 'group' => 'products', 'label' => 'Manage products'],
]);
```

Then grant to the appropriate roles:

```php
$permissions->grantToRole(UserRole::STORE_KEEPER->value, 'products.view');
```

The Settings > Roles UI will automatically render the new group and toggles.
