Compare commits

...

2 Commits

Author SHA1 Message Date
Matthieu 01856b147c fix(rbac) : gate les listes Gitea/BookStack par projects.manage (et non ROLE_USER)
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.
2026-06-29 11:23:56 +02:00
Matthieu 4a1d611d3c fix(rbac) : ouvre la liste des repos Gitea et des étagères BookStack aux ROLE_USER
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).
2026-06-29 11:19:12 +02:00
2 changed files with 6 additions and 2 deletions
@@ -15,7 +15,9 @@ use Symfony\Component\Serializer\Attribute\Groups;
uriTemplate: '/bookstack/shelves', uriTemplate: '/bookstack/shelves',
normalizationContext: ['groups' => ['bookstack_shelf:read']], normalizationContext: ['groups' => ['bookstack_shelf:read']],
provider: BookStackShelfProvider::class, provider: BookStackShelfProvider::class,
security: "is_granted('ROLE_ADMIN')", // Liste toutes les étagères visibles par le token BookStack global :
// réservé à qui configure un projet (ProjectDrawer), pas à tout user.
security: "is_granted('project-management.projects.manage')",
), ),
], ],
)] )]
@@ -15,7 +15,9 @@ use Symfony\Component\Serializer\Attribute\Groups;
uriTemplate: '/gitea/repositories', uriTemplate: '/gitea/repositories',
normalizationContext: ['groups' => ['gitea_repo:read']], normalizationContext: ['groups' => ['gitea_repo:read']],
provider: GiteaRepositoryProvider::class, provider: GiteaRepositoryProvider::class,
security: "is_granted('ROLE_ADMIN')", // Liste l'intégralité des dépôts visibles par le token Gitea global :
// réservé à qui configure un projet (ProjectDrawer), pas à tout user.
security: "is_granted('project-management.projects.manage')",
), ),
], ],
)] )]