# Guide de Migration - Système de Permissions Dynamiques

## Résumé des Problèmes Résolus

### 1. Problème Principal Identifié
- **Erreur 403** sur les pages `kitchen.php` et `inventory.php` pour l'utilisateur bably
- **Cause** : Les contrôleurs utilisaient des permissions incorrectes (`kitchen` et `inventory` au lieu de `kitchen.view` et `inventory.view`)

### 2. Corrections Appliquées

#### A. Correction des Contrôleurs
- **KitchenController.php** : Remplacé `hasPermission('kitchen')` par `hasPermission('kitchen.view')`
- **InventoryController.php** : Remplacé `$this->checkPermission('inventory')` par `$this->checkPermission('inventory.view')`

#### B. Système de Permissions Amélioré
- Création d'un nouveau gestionnaire de permissions : `config/enhanced_permissions_manager.php`
- Hiérarchie des rôles automatique
- Cache des permissions pour de meilleures performances
- Niveaux d'accès dynamiques
- Modules accessibles selon les permissions

## Fonctionnalités du Nouveau Système

### 1. Hiérarchie des Rôles
```php
$roleHierarchy = [
    'admin' => ['all'],
    'manager' => [/* toutes les permissions manager */],
    'reception' => [/* permissions réception */],
    'cuisinier' => [/* permissions restaurant/cuisine/stock */],
    'serveur' => [/* permissions restaurant */],
    'stock' => [/* permissions stock */]
];
```

### 2. Niveaux d'Accès Dynamiques
- **admin** : Accès complet
- **manager** : Gestion complète
- **restaurant** : Module restaurant/cuisine/stock
- **reception** : Gestion hôtel
- **basic** : Accès limité

### 3. Modules Organisés
- **Gestion Hôtel** : Réservations, clients, chambres
- **Restaurant & Cuisine** : Restaurant, cuisine, stock
- **Paiements & Caisse** : Paiements, caisse
- **Administration** : Utilisateurs, rôles
- **Rapports** : Statistiques et rapports

### 4. Cache des Permissions
- Amélioration des performances
- Évite les requêtes répétées
- Cache automatique des résultats

## Utilisation du Nouveau Système

### 1. Remplacement Simple
```php
// Ancien système
require_once __DIR__ . '/config/permissions_manager.php';
$permissionsManager = getPermissionsManager();

// Nouveau système
require_once __DIR__ . '/config/enhanced_permissions_manager.php';
$permissionsManager = getEnhancedPermissionsManager();
```

### 2. Fonctions Disponibles
```php
// Vérifier une permission
$hasPermission = $permissionsManager->hasPermission('restaurant.view');

// Vérifier plusieurs permissions
$hasAny = $permissionsManager->hasAnyPermission(['restaurant.view', 'kitchen.view']);
$hasAll = $permissionsManager->hasAllPermissions(['restaurant.view', 'restaurant.edit']);

// Obtenir le niveau d'accès
$accessLevel = $permissionsManager->getAccessLevel(); // 'restaurant', 'admin', etc.

// Obtenir les modules accessibles
$modules = $permissionsManager->getAccessibleModules();

// Obtenir les menus visibles
$menus = $permissionsManager->getVisibleMenuItems();

// Obtenir les actions rapides
$actions = $permissionsManager->getVisibleQuickActions();

// Obtenir les statistiques
$stats = $permissionsManager->getVisibleStats();
```

## Migration Recommandée

### 1. Phase 1 - Test (Déjà Fait)
- ✅ Correction des erreurs 403
- ✅ Test du système amélioré
- ✅ Validation des permissions

### 2. Phase 2 - Migration Graduelle
```php
// Dans chaque fichier qui utilise les permissions
// Remplacer :
require_once __DIR__ . '/config/permissions_manager.php';
$permissionsManager = getPermissionsManager();

// Par :
require_once __DIR__ . '/config/enhanced_permissions_manager.php';
$permissionsManager = getEnhancedPermissionsManager();
```

### 3. Phase 3 - Optimisation
- Mise à jour des vues pour utiliser les nouveaux modules
- Amélioration de l'interface utilisateur
- Ajout de nouvelles fonctionnalités

## Fichiers à Modifier

### 1. Fichiers Principaux
- `dashboard_dynamic.php`
- `includes/header_dynamic.php`
- Tous les contrôleurs dans `controllers/`

### 2. Fichiers de Vue
- `views/dashboard/`
- `views/kitchen/`
- `views/inventory/`
- `views/restaurant/`

### 3. Fichiers de Configuration
- `config/permissions_manager.php` (garder pour compatibilité)
- `config/enhanced_permissions_manager.php` (nouveau)

## Tests de Validation

### 1. Test de l'Utilisateur Bably
```bash
# Exécuter le script de test
php test_enhanced_permissions.php
```

### 2. Test de Connexion Réelle
1. Aller sur `http://localhost:81/StayManager/login.php`
2. Se connecter avec bably / cuisinier123
3. Vérifier l'accès aux pages :
   - ✅ Restaurant
   - ✅ Cuisine
   - ✅ Stock
   - ❌ Dashboard (normal, pas de permission admin.dashboard)
   - ❌ Réservations (normal, pas de permission bookings.view)

### 3. Test des Permissions
- Vérifier que les menus s'affichent correctement
- Vérifier que les actions rapides sont contextuelles
- Vérifier que les statistiques sont personnalisées

## Avantages du Nouveau Système

### 1. Performance
- Cache des permissions
- Requêtes optimisées
- Chargement plus rapide

### 2. Flexibilité
- Hiérarchie des rôles automatique
- Permissions granulaires
- Modules organisés

### 3. Maintenabilité
- Code plus propre
- Séparation des responsabilités
- Documentation intégrée

### 4. Expérience Utilisateur
- Interface adaptée au rôle
- Menus contextuels
- Actions rapides pertinentes

## Prochaines Étapes

### 1. Application Graduelle
- Migrer les fichiers un par un
- Tester chaque migration
- Valider les fonctionnalités

### 2. Améliorations Futures
- Ajout de nouveaux rôles
- Permissions plus granulaires
- Interface d'administration des permissions

### 3. Monitoring
- Suivi des performances
- Logs des accès
- Statistiques d'utilisation

## Support et Maintenance

### 1. En Cas de Problème
- Vérifier les logs dans `logs/`
- Utiliser les scripts de test
- Consulter la documentation

### 2. Mise à Jour
- Sauvegarder la base de données
- Tester en environnement de développement
- Déployer progressivement

### 3. Formation
- Documenter les nouveaux rôles
- Former les utilisateurs
- Créer des guides d'utilisation

---

**Note** : Ce système de permissions amélioré est maintenant prêt pour la production et peut être appliqué progressivement à l'ensemble de l'application StayManager.
