fix(rbac) : gate les listes Gitea/BookStack par projects.manage #33

Merged
matthieu merged 2 commits from fix/rbac-integration-gating into develop 2026-06-29 09:35:53 +00:00
Owner

Complément à la MR #32 (mergée sans ces 2 commits).

Corrige les 403 d'un compte non-admin sur la liste des dépôts Gitea (/gitea/repositories) et la liste des étagères BookStack (/bookstack/shelves), consommées par le ProjectDrawer (configuration du dépôt/étagère d'un projet).

Ces deux ressources étaient gardées par ROLE_ADMIN alors que toutes leurs ressources sœurs (branches, pull requests, recherche, liens) sont en ROLE_USER. Mais un simple passage à ROLE_USER serait trop permissif : elles listent tout ce que voit le token d'intégration global, sans filtrage par utilisateur (signalé par la revue de sécurité). Elles sont donc gatées sur la permission métier project-management.projects.manage — la permission de l'écran qui les consomme. Les admins conservent l'accès via le bypass ROLE_ADMIN du PermissionVoter.

Suite complète verte (231 tests).

Complément à la MR #32 (mergée sans ces 2 commits). Corrige les 403 d'un compte non-admin sur la **liste des dépôts Gitea** (`/gitea/repositories`) et la **liste des étagères BookStack** (`/bookstack/shelves`), consommées par le `ProjectDrawer` (configuration du dépôt/étagère d'un projet). Ces deux ressources étaient gardées par `ROLE_ADMIN` alors que toutes leurs ressources sœurs (branches, pull requests, recherche, liens) sont en `ROLE_USER`. Mais un simple passage à `ROLE_USER` serait trop permissif : elles listent **tout** ce que voit le token d'intégration **global**, sans filtrage par utilisateur (signalé par la revue de sécurité). Elles sont donc gatées sur la permission métier **`project-management.projects.manage`** — la permission de l'écran qui les consomme. Les admins conservent l'accès via le bypass `ROLE_ADMIN` du `PermissionVoter`. Suite complète verte (231 tests).
matthieu added 2 commits 2026-06-29 09:35:17 +00:00
GiteaRepository (/gitea/repositories) et BookStackShelf (/bookstack/shelves)
étaient gardés par ROLE_ADMIN alors que toutes leurs ressources sœurs (branches,
pull requests, recherche, liens) sont en ROLE_USER. Un utilisateur non-admin
pouvait donc consommer les sous-ressources mais récupérait un 403 en listant les
dépôts / étagères racines. Aligné sur ROLE_USER (les *Settings et *TestConnection
restent ROLE_ADMIN : configuration réservée à l'admin).
fix(rbac) : gate les listes Gitea/BookStack par projects.manage (et non ROLE_USER)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 52s
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 1m34s
b61574bad2
Suite à la revue de sécurité : ROLE_ADMIN était trop strict (les ressources
sœurs sont en ROLE_USER) mais ROLE_USER brut est trop permissif — ces endpoints
listent TOUS les dépôts/étagères visibles par le token d'intégration global, sans
filtrage par utilisateur. Comme ils ne sont consommés que par le ProjectDrawer
(configuration du dépôt/étagère d'un projet), on les gate sur la permission métier
project-management.projects.manage. Les admins conservent l'accès via le bypass
ROLE_ADMIN du PermissionVoter.
matthieu merged commit 8aa54c187b into develop 2026-06-29 09:35:53 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Lesstime#33