docs: document Directus Flow for secure listing views increment
This commit is contained in:
@@ -193,7 +193,7 @@ Meldungen von Anzeigen.
|
||||
|
||||
| Collection | Read | Create | Update | Delete | Hinweise |
|
||||
|------------|:----:|:------:|:------:|:------:|----------|
|
||||
| `listings` | ✓ | ✓ | - | - | Nur `status=published` lesen |
|
||||
| `listings` | ✓ | ✓ | ✓* | - | Nur `status=published` lesen, *Update nur `views` (via Flow) |
|
||||
| `listings_files` | ✓ | ✓ | - | - | Für Bilder-Upload |
|
||||
| `directus_files` | ✓ | ✓ | - | - | Asset-Upload |
|
||||
| `categories` | ✓ | - | - | - | Nur `status=published` |
|
||||
@@ -204,3 +204,50 @@ Meldungen von Anzeigen.
|
||||
| `messages` | ✓ | ✓ | - | - | Filter via `conversation` ID |
|
||||
| `favorites` | ✓ | ✓ | - | ✓ | Nur eigene |
|
||||
| `reports` | - | ✓ | - | - | Nur erstellen |
|
||||
|
||||
---
|
||||
|
||||
## Directus Flows
|
||||
|
||||
### Increment Listing Views
|
||||
|
||||
**Zweck:** Sichert ab, dass `views` nur inkrementiert (nicht beliebig gesetzt) werden kann.
|
||||
|
||||
| Schritt | Typ | Beschreibung |
|
||||
|---------|-----|--------------|
|
||||
| 1. Trigger | Action (Non-Blocking) | `items.update` auf `listings` |
|
||||
| 2. Condition | Filter Rule | Prüft ob `views` im Payload vorhanden |
|
||||
| 3. Operation | Run Script | Prüft ob **nur** `views` geändert wurde |
|
||||
| 4. Condition | Filter Rule | Prüft Script-Ergebnis |
|
||||
|
||||
**Schritt 2 - Condition Rule (views vorhanden):**
|
||||
```json
|
||||
{
|
||||
"$trigger": {
|
||||
"payload": {
|
||||
"views": {
|
||||
"_nnull": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Schritt 3 - Run Script (nur views im Payload):**
|
||||
```javascript
|
||||
module.exports = async function(data) {
|
||||
const keys = Object.keys(data.$trigger.payload)
|
||||
return keys.length === 1 && keys[0] === 'views' ? 1 : 0
|
||||
}
|
||||
```
|
||||
|
||||
**Schritt 4 - Condition Rule (Script-Ergebnis prüfen):**
|
||||
```json
|
||||
{
|
||||
"$last": {
|
||||
"_eq": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hinweis:** Ohne diese Absicherung könnte jeder `views` auf beliebige Werte setzen.
|
||||
|
||||
Reference in New Issue
Block a user