# Gebruikers en rechten

Rollen, rechten per resource en controles in templates, libraries en de API.

Toegang in Nimbly is gebaseerd op rollen. Een gebruiker heeft één of meer rollen, en een rol heeft rechten. Dezelfde rechten gelden in de admin, in de API, bij inline bewerken en in je eigen templates.

## Rollen

De setup maakt twee rollen: `admin`, die alles mag, en `editor`. Rollen beheer je op `/nb-admin/roles/`. Het rechtenscherm toont een rij per resource met een vinkje per handeling, zodat een rol bijvoorbeeld projecten mag bewerken maar leads alleen mag lezen.

## Rechten

Elke resource heeft dezelfde set:

| Recht | Staat toe |
|---|---|
| `view-projects` | Projecten lezen |
| `create-projects` | Projecten toevoegen |
| `edit-projects` | Projecten wijzigen |
| `delete-projects` | Losse projecten verwijderen |
| `manage-projects` | Alles hierboven |
| `import-projects`, `export-projects` | Importeren en exporteren in de admin |

Andere rechten gaan over het platform zelf:

| Recht | Staat toe |
|---|---|
| `edit-inline-content` | Tekst en afbeeldingen op de pagina's bewerken |
| `view-nimblybar` | De bewerkbalk op de site |
| `view-admin-dashboard` | Het dashboard van de admin |
| `view-stats` | Bezoekersstatistieken |
| `edit-.config` | Site-instellingen en pagina-instellingen |
| `chat-nimbly` | De ingebouwde agent in de teamchat |

Projecten kunnen eigen rechten toevoegen, zoals `approve-orders`, en die in templates en libraries controleren.

## Toegang controleren in templates

Toon iets alleen aan gebruikers met een bepaald recht:

```html
[#feature-cond features=edit-projects tpl=btn-edit-project#]
[#feature-cond features=view-reports tpl=reports-panel tpl_else=reports-locked#]
```

Bescherm een hele pagina; een bezoeker zonder het recht wordt weggestuurd voordat er iets wordt getoond:

```html
[#access feature=view-reports#]
[#html#]
```

Een knop verbergen is presentatie, geen beveiliging. De handeling erachter, in de API of in een library, controleert het recht zelf.

## Toegang controleren in PHP

```php
load_library('access');
if (!access_by_feature('approve-orders')) {
    return;
}
```

In een eigen API-endpoint accepteert `api_access('<permission>')` de ingelogde gebruiker, een API-token of een uitdrukkelijk toegestane publieke handeling. Beperk de data tot de gebruiker als die van hem is, via `$_SESSION['username']`.

## Gebruikers met eigen data

Bewaar voor een ledenomgeving de eigenaar op het record en filter daarop in de library die de pagina voorbereidt. Een gebruiker mag zijn eigen profielvelden wijzigen; welke dat zijn, stel je in met `self_edit` in de resource users.

## API-gebruikers

Een integratie logt in als een eigen gebruiker, met een rol die alleen heeft wat nodig is. Een feed die projecten alleen leest, heeft `view-projects` nodig en verder niets. Zie [Integraties](/nl/docs/guides/integrations/).

Alle records van een resource in één keer verwijderen is een apart recht, `api_delete_resource_<resource>`, dat in geen enkel ander recht zit.

## Sessies

Sessies eindigen na een periode zonder activiteit: 4 uur voor bezoekers, 3 dagen voor ingelogde gebruikers en 7 dagen voor admins, per rol in te stellen onder `session` in de site-instellingen. **Sign out everyone** in de admin beëindigt alle sessies.
