mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix: release QA hardening across processing, media, security, and CI gates (#649)
A release-readiness QA pass over the whole product. The commits split into defects a user would hit and gates that were reporting green while measuring nothing. ## Fixes that change behaviour Rate limiting was bypassable on every install: TRUST_PROXY defaulted to true, so request.ip came from a client-set header and a forged X-Forwarded-For got past the login limiter. The default is now a private-network trust list. A transient Postgres outage stranded in-flight jobs, leaving finished output on disk with no row pointing at it. A reconciler now resolves those rows and adopts the bytes rather than dropping the work. A Redis connection that moved to a new address wedged every read-blocked consumer, so completions stopped signalling while health still answered 200. Socket timeouts plus subscriber pings recover it. Installing more than one AI bundle left the shared venv multi-versioned and silently broke three tools. The installer now reconciles distributions to one version each. Converting an image to JXL at quality 1 through 4 returned a 500, because libjxl 0.7 rejects the distance those values compute. The quality is floored at what the encoder honours. A missing ffmpeg was also reported to the user as a corrupt upload; it now says the engine is unavailable. RAW uploads reached an unpatched LibRaw on arm64, so it is built from source at 0.22.2, and the release scan was split so it can fail on an unfixed critical instead of hiding it behind ignore-unfixed. ## Gates that could not fail Two mutation lanes ran zero mutants because Stryker crawled the gitignored docs build; coverage discarded its whole report on any failing test; the lint gate skipped root tests, scripts, and two workspaces; and several generated matrices counted a host missing ffmpeg as a passing tool. Each now measures what it claims. Full evidence and the outstanding release items are tracked locally and are not part of this branch.
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
---
|
||||
description: "Gérez les utilisateurs, les rôles intégrés et personnalisés, les permissions, les clés API, les équipes, les sessions et le journal d'audit dans SnapOtter."
|
||||
i18n_source_hash: 5e28af686c96
|
||||
i18n_source_hash: bea8955f3aff
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0ef660e3c9b1
|
||||
i18n_output_hash: 500026917981
|
||||
i18n_hash_version: 2
|
||||
---
|
||||
|
||||
# Utilisateurs, rôles et permissions {#users-roles-permissions}
|
||||
@@ -82,12 +83,12 @@ Les 17 permissions. Contrôle total sur l'instance.
|
||||
| `pipelines:all` | Consulter et gérer les pipelines de tous les utilisateurs |
|
||||
| `settings:read` | Consulter les paramètres de l'instance |
|
||||
| `settings:write` | Modifier les paramètres de l'instance |
|
||||
| `users:manage` | Créer, mettre à jour et supprimer des comptes utilisateur |
|
||||
| `users:manage` | Créer et gérer des comptes d'utilisateurs dans les limites d'autorité de l'acteur |
|
||||
| `teams:manage` | Créer, mettre à jour et supprimer des équipes |
|
||||
| `features:manage` | Installer et gérer les bundles de fonctionnalités IA |
|
||||
| `system:health` | Accéder aux points de terminaison de santé et de disponibilité |
|
||||
| `audit:read` | Consulter le journal d'audit et lister les rôles |
|
||||
| `compliance:manage` | Gérer le cycle de vie RGPD et les fonctionnalités de conformité |
|
||||
| `compliance:manage` | Gérer le cycle de vie et les fonctionnalités de conformité du RGPD ; les opérations destructrices des utilisateurs restent limitées à l’autorité |
|
||||
| `webhooks:manage` | Configurer les webhooks sortants |
|
||||
| `security:manage` | Gérer les paramètres de sécurité (liste d'autorisation d'IP, application du SSO) |
|
||||
|
||||
@@ -110,15 +111,17 @@ curl -X POST http://localhost:1349/api/v1/roles \
|
||||
|
||||
Les noms de rôle doivent comporter de 2 à 30 caractères, en minuscules alphanumériques avec des tirets et des traits de soulignement.
|
||||
|
||||
### Permissions réservées aux administrateurs {#admin-reserved-permissions}
|
||||
### Limites de l'administration déléguée {#delegated-administration-boundaries}
|
||||
|
||||
Trois permissions sont réservées aux rôles intégrés et ne peuvent pas être attribuées à des rôles personnalisés :
|
||||
Les 17 autorisations peuvent être déléguées via des rôles personnalisés, mais une autorisation administrative ne rend pas ce rôle équivalent au rôle `admin` intégré. Les mutations utilisateur autorisées par `users:manage`, les opérations destructrices autorisées par `compliance:manage` et la gestion des rôles personnalisés autorisées par `security:manage` sont limitées par l'autorité actuelle de l'acteur :
|
||||
|
||||
- `compliance:manage`
|
||||
- `webhooks:manage`
|
||||
- `security:manage`
|
||||
- Les rôles intégrés suivent `admin` > `editor` > `user` ; les rôles personnalisés se trouvent sous les rôles intégrés.
|
||||
- Les autorisations de la cible doivent être contenues dans les autorisations **efficaces** de l'acteur. Une clé API étendue ne peut donc pas exercer d'autorisations omises de sa portée.
|
||||
- L'accès aux outils d'un rôle cible doit être contenu par le propre accès aux outils de l'acteur.
|
||||
- Un compte désactivé est comparé à son rôle d'origine lorsque ce rôle est enregistré sous la forme `disabled:<original-role>`.
|
||||
- La suppression d'un rôle personnalisé nécessite également l'autorisation d'attribuer la solution de secours intégrée `user` ; les membres désactivés restent désactivés sous le nom `disabled:user`.
|
||||
|
||||
L'API des rôles rejette toute requête qui inclut ces permissions. Seul le rôle intégré `admin` y a accès.
|
||||
Les informations d'identification et la configuration globales sont plus strictes : l'émission ou la révocation du jeton SCIM et l'importation de la configuration de l'instance nécessitent le rôle `admin` intégré avec une autorité d'administration effective complète.
|
||||
|
||||
### Permissions au niveau des outils {#tool-level-permissions}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user