# Konzept

## Notizen

- Kalender sollen unabhängig von Nutzern bestehen können
- Zugriffs-Stufen
  - `none`: kein Zugriff
  - `view`: nur lesend
  - `edit`: lesend und schreibend
  - `admin`: kann alles (auch Kalender löschen)
- einem Kalender können beliebig viele Nutzer zugeordnet werden, die jeweils bestimmte Zugriffs-Stufen zugewiesen haben
- Veranstaltungen bilden keine eigene Domäne
- es gibt verschiedene Arten von Quellen:
  - lokal
    - enthält Veranstaltungen
  - caldav
    - enthält keine eigenen Veranstaltungen
    - sollte read-only- und read/write-Modus haben
- nach dem Anmelden sieht man eine Kalender-Ansicht mit folgenden Kalendern kombiniert angezeigt:
  - öffentliche Kalender
  - nicht öffentliche Kalendar, bei welchen man mindestens Lese-Berechtigung hat
- öffentliche Kalendar können ohne Anmeldung betrachtet werden, jedoch nur mit einem schwer bis gar nicht erratbaren Link


## Zugriffssteuerung

Es gibt folgende Zugriffsstufen :

- `none`: kein Zugriff
- `view`: nur Lese-Zugriff
- `edit`: Lese- und Schreib-Zugriff
- `admin`: Lese- und Schreib-Zugriff + Bearbeitung von Kalender-Eigenschaften

Zur Bestimmung welche Zugriffsstufe ein Nutzer auf einen Kalender/Termin hat, werden drei Werte betrachtet:

- Öffentlichkeit des Kalenders (`public`)
- Standard-Zugriffsstufe des Kalenders (`default_level`)
- dem Nutzer zugewiesene Zugriffsstufe für den Kalender (`attributed_level`)

Diese Angaben fließen in folgende Formel ein:

```
access_level = max(
    (if public then 'view'  else 'none'),
    (if (attributed = NULL) then default_level else attributed_level)
)
```

… wobei die Ordnung der Zugriffsstufen der oben ersichtlichen Reihenfolge entspricht.

Einzeln aufgeführt ergibt das:

| public | default level | attributed level | result |
|-- |-- |-- |-- |
| no | none | - | none |
| no | none | none | none |
| no | none | view | view |
| no | none | edit | edit |
| no | none | admin | admin |
| no | view | - | view |
| no | view | none | none |
| no | view | view | view |
| no | view | edit | edit |
| no | view | admin | admin |
| no | edit | - | edit |
| no | edit | none | none |
| no | edit | view | view |
| no | edit | edit | edit |
| no | edit | admin | admin |
| no | admin | - | admin |
| no | admin | none | none |
| no | admin | view | view |
| no | admin | edit | edit |
| no | admin | admin | admin |
| yes | none | - | view |
| yes | none | none | view |
| yes | none | view | view |
| yes | none | edit | edit |
| yes | none | admin | admin |
| yes | view | - | view |
| yes | view | none | view |
| yes | view | view | view |
| yes | view | edit | edit |
| yes | view | admin | admin |
| yes | edit | - | edit |
| yes | edit | none | view |
| yes | edit | view | view |
| yes | edit | edit | edit |
| yes | edit | admin | admin |
| yes | admin | - | admin |
| yes | admin | none | none |
| yes | admin | view | view |
| yes | admin | edit | edit |
| yes | admin | admin | admin |
