---
suivi: 1434
date: 2026-09-04
sujet: Droits GS_GEMME_PDG — Foncier, Patrimoine, Avis d'imposition
chantier: droits
type: feature
statut: poussé
hash: 85438031
fichiers:
  - config/feature_permissions.php
  - config/erp.php
  - app/Support/Acl/RecordAcl.php
  - app/Support/Foncier/FoncierPartageTravail.php
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - app/Models/Concerns/HasRecordHabilitations.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Support/Foncier/Alertes/Types/DossierVeilleRevueType.php
  - app/Support/Foncier/Alertes/Types/ParcelleOccupationPreavisType.php
  - app/Support/Foncier/Alertes/Types/ConditionSuspensiveEcheanceType.php
  - database/migrations/2026_09_04_100000_grant_foncier_permissions_to_gs_gemme_pdg.php
  - tests/Unit/GsGemmePdgDroits1434SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1434_droits_gs_gemme_pdg.md
---

## PROMPT ENVOYÉ

SUIVI #1434 — GS_GEMME_PDG = droits DG sur Foncier / Patrimoine / Avis
uniquement. Pas de factures / NV2 / paiement / verrou / socle total / admin.
Contrôles en m365GroupNames() brut. Sandrine = compte de test.

## FICHES LUES

- `#1420` — Avis : GS_GEMME_PDG déjà dans GROUPES_AUTORISES (m365GroupNames brut).
- `#1422` — menu Patrimoine via `peutVoirMenuFoncier` (= `foncier_visible`).
- `#1105` — pattern grant + migration `feature_permission_groups` ; DG a `!foncier.*`.
- `#1089` — `foncier.deverrouillage` pour DG + DSI.

## SYNTHÈSE

### 0.1 Membres GS_GEMME_PDG
Base locale inaccessible (sqlite absent). Requête pour Robin (ne pas inventer) :

```sql
SELECT id, name, email, m365_groups
FROM users
WHERE m365_groups LIKE '%GS_GEMME_PDG%';

SELECT COUNT(*) AS n
FROM users
WHERE m365_groups LIKE '%GS_GEMME_PDG%';
```

Puis filtrer en PHP/`JSON_CONTAINS` si besoin (LIKE peut sur-matcher).

### Décisions clés
- **Avis** : déjà autorisé (#1420) — inchangé côté contrôleur.
- **Accès module** : migration peuplant `foncier.lecture` + `foncier.prix` +
  `foncier.deverrouillage` (PermissionService = DB). Sans lecture, menu et routes
  `/foncier` `/patrimoine` restent 403 malgré les bypass.
- **Pas de `foncier.gestion`** : évite suppressions parcelle/promesse/acte.
- Bypass ACL / prospection / alertes destinataires : + `GS_GEMME_PDG` (comme DG).
- Factures / Paiement / Verrou / SOCLE / Admin : **non touchés**.

### Actions destructrices (0.4) — signalées, non accordées via gestion
- Destroy parcelle / promesse / acte / documents : `foncier.gestion` → **non accordé**.
- Soft-delete avis : déjà ouvert à tout groupe de `GROUPES_AUTORISES` (dont GEMME_PDG
  depuis #1420) → **signalé à Robin**, non restreint dans ce lot.

## DÉPLOIEMENT / TEST

```bash
git pull origin main
php artisan migrate --force
php artisan view:clear
php artisan journal:sync
```

Puis impersonation Sandrine PORTALES.

## LEÇON

`default_mappings` config ne peuplent pas les droits runtime : `PermissionService`
lit `feature_permission_groups`. Un groupe M365 « reconnu » en admin n’ouvre pas
le Foncier sans lignes de permissions + alignement menu (`foncier.lecture`).
