# Guide du Système de Permissions Dynamique - StayManager

## Vue d'ensemble

Le système de permissions dynamique de StayManager permet de gérer les accès des utilisateurs de manière centralisée et flexible. Il remplace l'ancien système statique par un système plus robuste et maintenable.

## Problèmes résolus

### Avant la correction
- ❌ L'utilisateur `bably` (Cuisinier) n'avait pas accès aux modules Restaurant, Cuisine et Stock
- ❌ L'admin système perdait l'accès à certains menus
- ❌ Le système de permissions était statique et difficile à maintenir
- ❌ Les menus n'étaient pas filtrés selon les permissions

### Après la correction
- ✅ L'utilisateur `bably` a maintenant accès aux modules Restaurant, Cuisine et Stock
- ✅ L'admin système a retrouvé l'accès à tous les menus
- ✅ Système de permissions dynamique et centralisé
- ✅ Menus filtrés automatiquement selon les permissions

## Architecture du nouveau système

### 1. Gestionnaire de permissions (`config/permissions_manager.php`)

Le `PermissionsManager` est la classe centrale qui gère :
- Le chargement des permissions utilisateur
- La vérification des permissions
- La génération des menus dynamiques
- La gestion des actions rapides et statistiques

### 2. Header dynamique (`includes/header_dynamic.php`)

Le nouveau header utilise le gestionnaire de permissions pour :
- Afficher uniquement les menus autorisés
- Gérer les sous-menus dynamiquement
- Maintenir la compatibilité avec l'ancien système

### 3. Dashboard dynamique (`views/dashboard/dynamic.php`)

Le dashboard dynamique affiche :
- Statistiques selon les permissions
- Actions rapides filtrées
- Sections d'administration conditionnelles

## Utilisation

### Accès au nouveau dashboard

1. **Dashboard dynamique** : `http://localhost:81/StayManager/dashboard_dynamic.php`
2. **Ancien dashboard** : `http://localhost:81/StayManager/dashboard.php` (pour compatibilité)

### Test des permissions

1. **Test général** : `http://localhost:81/StayManager/test_dynamic_permissions.php`
2. **Test pour bably** : `http://localhost:81/StayManager/test_bably_dashboard.php`

### Connexion avec bably

- **Nom d'utilisateur** : `bably`
- **Mot de passe** : `cuisinier123`
- **Rôle** : Cuisinier
- **Permissions** : `restaurant.view`, `restaurant.edit`, `inventory.view`, `inventory.stock`

## Permissions par rôle

### Administrateur (`admin`)
- **Permissions** : `["all"]`
- **Accès** : Tous les modules et fonctionnalités

### Cuisinier (`Cuisinier`)
- **Permissions** : `["restaurant.view", "restaurant.edit", "inventory.view", "inventory.stock"]`
- **Accès** : Restaurant, Cuisine, Stock uniquement

### Manager (`manager`)
- **Permissions** : `["clients.view", "clients.create", "clients.edit", "bookings.view", "bookings.create", "bookings.edit", "payments.view", "reports.view"]`
- **Accès** : Gestion des clients, réservations, paiements et rapports

## Fonctionnalités du système dynamique

### 1. Menus dynamiques
- Les menus s'affichent selon les permissions de l'utilisateur
- Les sous-menus sont également filtrés
- Navigation cohérente et sécurisée

### 2. Actions rapides
- Actions filtrées selon les permissions
- Interface adaptée au rôle de l'utilisateur
- Accès direct aux fonctionnalités autorisées

### 3. Statistiques
- Statistiques affichées selon les permissions
- Données pertinentes pour le rôle
- Interface personnalisée

### 4. Administration
- Section d'administration conditionnelle
- Accès aux paramètres selon les permissions
- Gestion des utilisateurs et rôles

## Compatibilité

### Ancien système
- Les fonctions `hasPermission()`, `isLoggedIn()`, `getCurrentUser()` continuent de fonctionner
- L'ancien dashboard reste accessible
- Migration progressive possible

### Nouveau système
- Utilise `PermissionsManager` pour une gestion centralisée
- Fonctions helper : `hasPermissionDynamic()`, `getPermissionsManager()`
- Interface plus flexible et maintenable

## Maintenance

### Ajout de nouvelles permissions

1. Ajouter la permission dans `models/Role.php` (méthode `getAvailablePermissions()`)
2. Mettre à jour les rôles dans la base de données
3. Ajouter la permission aux éléments de menu dans `PermissionsManager`

### Ajout de nouveaux menus

1. Ajouter l'élément dans `PermissionsManager::initializeMenuItems()`
2. Définir les permissions requises
3. Le menu s'affichera automatiquement pour les utilisateurs autorisés

### Modification des rôles

1. Accéder à `http://localhost:81/StayManager/roles.php`
2. Modifier les permissions du rôle
3. Les changements sont appliqués immédiatement

## Dépannage

### L'utilisateur n'a pas accès aux menus attendus

1. Vérifier les permissions dans la base de données
2. Vérifier que l'utilisateur est assigné au bon rôle
3. Tester avec `test_dynamic_permissions.php`

### L'admin n'a plus accès à certains menus

1. Vérifier que le rôle admin a la permission `["all"]`
2. Vérifier que l'utilisateur admin est assigné au bon rôle
3. Tester avec `test_dynamic_permissions.php`

### Erreurs de session

1. Vérifier que la session est démarrée
2. Vérifier que les variables de session sont correctes
3. Utiliser `debug_permissions_complete.php` pour diagnostiquer

## Fichiers créés/modifiés

### Nouveaux fichiers
- `config/permissions_manager.php` - Gestionnaire de permissions
- `includes/header_dynamic.php` - Header dynamique
- `views/dashboard/dynamic.php` - Dashboard dynamique
- `dashboard_dynamic.php` - Point d'entrée du dashboard dynamique
- `test_dynamic_permissions.php` - Tests du système
- `test_bably_dashboard.php` - Test spécifique pour bably
- `fix_permissions_system_final.php` - Script de correction

### Fichiers modifiés
- `config/config.php` - Fonction `hasPermission()` améliorée
- `config/functions.php` - Fonctions helper ajoutées

## Conclusion

Le système de permissions dynamique résout tous les problèmes identifiés :

1. ✅ **Accès correct pour bably** : L'utilisateur bably a maintenant accès aux modules Restaurant, Cuisine et Stock
2. ✅ **Admin restauré** : L'admin système a retrouvé l'accès à tous les menus
3. ✅ **Système dynamique** : Les permissions sont gérées de manière centralisée et flexible
4. ✅ **Interface adaptée** : Chaque utilisateur voit uniquement les fonctionnalités autorisées
5. ✅ **Maintenabilité** : Le système est facile à étendre et à maintenir

Le système est maintenant prêt pour la production et peut être utilisé immédiatement.



