---
# System prepended metadata

title: 'Team 1: API proposal'

---

# Team 1: API proposal

## Endpoints


### Afkortingen

- YA: Yes, all
- YO: Yes, own organisation
- YU: Yes, own user
- YIP: Yes, if permission from admin
- N: No
- IMed = Interne Medewerker van het MAGDA platform
- Admin = Administrator van organisatie
- Klant = klant/afnemer
- Andere = gebruiker die nog niet gelinkt is met organisatie

#### opmerkingen
- Super Admin? (= persoon die alles kan zien en doen, voor worst cases als bvb system failure)

### Organisaties
- IMed: Toegang tot gebruikers van alle organisaties
- Admin: Enkel toegang tot gebruikers van eigen organisaties
- Klant/Andere: Enkel toegang tot zichzelf als gebruiker


| HTTP method | CRUD   | Endpoint    | IMed | Admin | Klant | Andere |
| ----------- | ------ | ----------- |:----:|:-----:|:-----:|:------:|
| GET         | Read   | `/org`      |  YA  |   YO  |  YO   |   N    |
| POST        | Create | `/org`      |  YA  |   N   |   N   |   YU   |
| GET         | Read   | `/org/{id}` |  YA  |  YO   |  YO   |   YO   |
| PATCH       | Update | `/org/{id}` |  YA  |  YO   |   N   |   YO   |
| DELETE      | Delete | `/org/{id}` |  YA  |  YO   |   N   |   YO   |

- Andere maakt organisatie aan, maar heeft geen organisatie op dat moment


#### opmerkingen
- `[JP]` willen we dat `other` (mogelijks random users) organisaties kunnen maken of enkel IMed? Zit in de CRO vraagskes :P

#### Dossiers van organisatie
iets van `/org/{id}/dossiers` ?
- vooral voor klantgericht gebruik

#### Gebruikers van organisatie
iets van `/org/{id}/gebruikers` ?

#### Machtigingen van organisatie
iets van `/org/{id}/machtigingen` ?

#### Diensten van organisatie
iets van `/org/{id}/diensten` ?

#### Pakketten van organisatie
iets van `/org/{id}/pakketten` ?




### Gebruikers

- IMed: Toegang tot gebruikers van alle organisaties
- Admin: Enkel toegang tot gebruikers van eigen organisaties
- Klant: Enkel toegang tot zichzelf als gebruiker, kan zichzelf niet verwijderen
- Andere: Kan zichzelf verwijderen (want niet meer gelinkt met een organisatie)

| HTTP method | CRUD   | Endpoint           | IMed | Admin | Klant | Andere |
| ----------- | ------ | ------------------ |:----:|:-----:|:-----:| :----: |
| GET         | Read   | `/gebruikers`      |  YA  |   N   |   N   |   N    |
| POST        | Create | `/gebruikers`      |  YA  |   N   |   N   |   N    |
| GET         | Read   | `/gebruikers/{id}` |  YA  |  YO   |   YU  |   YU   |
| PATCH       | Update | `/gebruikers/{id}` |  YA  |  YO   |   YU  |   YU   |
| DELETE      | Delete | `/gebruikers/{id}` |  YA  |  YO   |   N   |   YU   |


### Dossier

- IMed: Toegang tot dossiers van alle organisaties
- Admin: Enkel toegang tot dossiers van eigen organisaties
- Klant: Enkel toegang tot dossiers van eigen organisaties, mits permissies van Admin
- Andere: Geen toegang tot dossiers, want niet gelinkt met organisatie

| HTTP method | CRUD   | Endpoint         | IMed | Admin | Klant | Andere |
| ----------- | ------ | ---------------- |:----:|:-----:|:-----:|:------:|
| GET         | Read   | `/dossiers`      |  YA  |   YO  |  YIP  |   N    |
| POST        | Create | `/dossiers`      |  YA  |   YO  |  YIP  |   N    |
| GET         | Read   | `/dossiers/{id}` |  YA  |   YO  |  YIP  |   N    |
| PATCH       | Update | `/dossiers/{id}` |  YA  |   YO  |  YIP  |   N    |
| DELETE      | Delete | `/dossiers/{id}` |  YA  |   YO  |  YIP  |   N    |


#### opmerkingen
- `[JP]` zou dit mss niet beter aanvraag genoemd worden?

### Magda-diensten

- IMed: Toegang tot alle Magda-diensten
- Admin/Klant: Enkel lees-toegang tot het aanbod van Magda-diensten
- Andere: Geen toegang

| HTTP method | CRUD   | Endpoint         | IMed | Admin | Klant | Andere |
| ----------- | ------ | ---------------- |:----:|:-----:|:-----:|:------:|
| GET         | Read   | `/diensten`      |  YA  |   YA  |   YA  |   YA   |
| POST        | Create | `/diensten`      |  YA  |   N   |   N   |   N    |
| GET         | Read   | `/diensten/{id}` |  YA  |   YA  |   YA  |   YA   |
| PATCH       | Update | `/diensten/{id}` |  YA  |   N   |   N   |   N    |
| DELETE      | Delete | `/diensten/{id}` |  YA  |   N   |   N   |   N    |


#### opmerkingen


### Pakket *(MS2)*

- IMed: Toegang tot alle Magda-pakketten
- Admin/Klant: Enkel lees-toegang tot het aanbod van Magda-pakketten
- Andere: Geen toegang

| HTTP method | CRUD   | Endpoint             | IMed | Admin | Klant | Andere |
| ----------- | ------ | -------------------- |:----:|:-----:|:-----:|:------:|
| GET         | Read   | `/pakketten`         |  YA  |   YA  |   YA  |   YA    |
| POST        | Create | `/pakketten`         |  YA  |   N   |   N   |   N     |
| GET         | Read   | `/pakketten/{id}`    |  YA  |   YA  |   YA  |   YA    |
| PATCH       | Update | `/pakketten/{id}`    |  YA  |   N   |   N   |   N     |
| DELETE      | Delete | `/pakketten/{id}`    |  YA  |   N   |   N   |   N     |


#### opmerkingen
- `[JP]` Pakket is nog niet nodig in de API voor milestone 1, dus kan nog veranderen en moet in principe niet in de API (maar mag al vastgelegd worden)

### Machtigingen

- IMed: Toegang tot alle Machtigingen
- Admin/Klant: Enkel lees-toegang tot het aanbod van Machtigingen
- Andere: Geen toegang

| HTTP method | CRUD   | Endpoint             | IMed | Admin | Klant | Andere |
| ----------- | ------ | -------------------- |:----:|:-----:|:-----:|:-----:|
| GET         | Read   | `/machtigingen`      |  YA  |  YA   |  YA   |   N   |
| POST        | Create | `/machtigingen`      |  YA  |   N   |   N   |   N   |
| GET         | Read   | `/machtigingen/{id}` |  YA  |  YA   |  YA   |   N   |
| PATCH       | Update | `/machtigingen/{id}` |  YA  |   N   |   N   |   N   |
| DELETE      | Delete | `/machtigingen/{id}` |  YA  |   N   |   N   |   N   |

#### opmerkingen


## Andere vereisten

* [JWT tokens](https://jwt.io/) voor de authenticatie, makkelijk om rollen toe te voegen en veiliger dan cookies. ([Java JWT library](https://github.com/auth0/java-jwt))
    * note, voor milestone 1 nog niet nodig (maar we kunnen het ook al vastleggen dat JWT gebruikt wordt)

