# Guide de Gestion des Utilisateurs - StayManager

## Vue d'ensemble

Le système de gestion des utilisateurs de StayManager permet de gérer les utilisateurs, les rôles et les permissions de manière centralisée et sécurisée.

## Fonctionnalités

### 1. Gestion des Utilisateurs
- **Création** : Créer de nouveaux utilisateurs avec nom d'utilisateur, email, mot de passe
- **Modification** : Modifier les informations des utilisateurs existants
- **Suppression** : Supprimer des utilisateurs (sauf l'administrateur principal)
- **Activation/Désactivation** : Contrôler l'accès des utilisateurs
- **Recherche** : Rechercher des utilisateurs par nom, email, rôle

### 2. Gestion des Rôles
- **Création** : Créer de nouveaux rôles avec permissions personnalisées
- **Modification** : Modifier les rôles existants et leurs permissions
- **Suppression** : Supprimer des rôles non utilisés
- **Permissions** : Assigner des permissions granulaires aux rôles

### 3. Système de Permissions

#### Permissions par Catégorie

**Gestion des utilisateurs**
- `users.view` : Voir les utilisateurs
- `users.create` : Créer des utilisateurs
- `users.edit` : Modifier les utilisateurs
- `users.delete` : Supprimer les utilisateurs

**Gestion des rôles**
- `roles.view` : Voir les rôles
- `roles.create` : Créer des rôles
- `roles.edit` : Modifier les rôles
- `roles.delete` : Supprimer les rôles

**Gestion des clients**
- `clients.view` : Voir les clients
- `clients.create` : Créer des clients
- `clients.edit` : Modifier les clients
- `clients.delete` : Supprimer les clients

**Réservations de séjour**
- `bookings.view` : Voir les réservations
- `bookings.create` : Créer des réservations
- `bookings.edit` : Modifier les réservations
- `bookings.delete` : Supprimer les réservations
- `bookings.checkin` : Enregistrer les arrivées
- `bookings.checkout` : Enregistrer les départs

**Gestion des événements**
- `events.view` : Voir les événements
- `events.create` : Créer des événements
- `events.edit` : Modifier les événements
- `events.delete` : Supprimer les événements

**Salles d'événements**
- `event_rooms.view` : Voir les salles d'événements
- `event_rooms.create` : Créer des salles d'événements
- `event_rooms.edit` : Modifier les salles d'événements
- `event_rooms.delete` : Supprimer les salles d'événements

**Restaurant**
- `restaurant.view` : Voir le restaurant
- `restaurant.create` : Créer des factures
- `restaurant.edit` : Modifier les factures
- `restaurant.delete` : Supprimer les factures
- `restaurant.payments` : Gérer les paiements

**Inventaire**
- `inventory.view` : Voir l'inventaire
- `inventory.create` : Ajouter des articles
- `inventory.edit` : Modifier les articles
- `inventory.delete` : Supprimer les articles
- `inventory.stock` : Gérer les stocks

**Rapports**
- `reports.view` : Voir les rapports
- `reports.export` : Exporter les données
- `reports.financial` : Rapports financiers

**Configuration**
- `settings.view` : Voir les paramètres
- `settings.edit` : Modifier les paramètres
- `settings.backup` : Sauvegardes

**Administration**
- `admin.dashboard` : Tableau de bord administrateur
- `admin.logs` : Voir les logs
- `admin.maintenance` : Maintenance système

## Rôles par Défaut

### 1. Administrateur
- **Description** : Accès complet à toutes les fonctionnalités
- **Permissions** : Toutes les permissions (45 permissions)
- **Utilisation** : Gestion complète du système

### 2. Réceptionniste
- **Description** : Gestion des réservations et des clients
- **Permissions** : 16 permissions
- **Utilisation** : Accueil, réservations, clients

### 3. Cuisinier
- **Description** : Gestion de la cuisine et des commandes
- **Permissions** : 4 permissions
- **Utilisation** : Restaurant, inventaire

### 4. Gestionnaire
- **Description** : Gestion des événements et des salles
- **Permissions** : 13 permissions
- **Utilisation** : Événements, salles, clients

### 5. Comptable
- **Description** : Gestion financière et rapports
- **Permissions** : 5 permissions
- **Utilisation** : Rapports, paiements

### 6. Utilisateur
- **Description** : Accès limité aux fonctionnalités de base
- **Permissions** : 6 permissions (lecture seule)
- **Utilisation** : Consultation uniquement

## Utilisation

### Accès aux Fonctionnalités

1. **Gestion des Utilisateurs** : `http://localhost:81/StayManager/users.php`
2. **Gestion des Rôles** : `http://localhost:81/StayManager/roles.php`

### Création d'un Utilisateur

1. Aller sur la page des utilisateurs
2. Cliquer sur "Nouvel Utilisateur"
3. Remplir le formulaire :
   - Nom d'utilisateur (unique)
   - Email (unique)
   - Prénom et nom
   - Téléphone (optionnel)
   - Mot de passe (minimum 8 caractères)
   - Rôle
   - Statut (actif/inactif)
4. Cliquer sur "Créer l'utilisateur"

### Création d'un Rôle

1. Aller sur la page des rôles
2. Cliquer sur "Nouveau Rôle"
3. Remplir le formulaire :
   - Nom du rôle (unique)
   - Description
   - Permissions (sélectionner les permissions nécessaires)
4. Cliquer sur "Créer le rôle"

### Modification d'un Utilisateur

1. Aller sur la page des utilisateurs
2. Cliquer sur l'icône "Modifier" de l'utilisateur
3. Modifier les informations nécessaires
4. Cliquer sur "Mettre à jour"

### Modification d'un Rôle

1. Aller sur la page des rôles
2. Cliquer sur l'icône "Modifier" du rôle
3. Modifier les informations et permissions
4. Cliquer sur "Mettre à jour"

## Sécurité

### Authentification
- Vérification de l'authentification sur toutes les pages
- Redirection vers la page de connexion si non authentifié

### Autorisation
- Vérification des permissions pour chaque action
- Redirection vers page d'erreur 403 si non autorisé

### Validation
- Validation des données d'entrée
- Protection contre les injections SQL
- Hachage sécurisé des mots de passe

### Logs
- Enregistrement des erreurs
- Traçabilité des actions

## Intégration

### Dans le Menu Principal
Le système s'intègre automatiquement dans le menu principal si l'utilisateur a les permissions nécessaires.

### Dans les Contrôleurs
Utiliser les fonctions d'authentification et d'autorisation :
```php
// Vérifier l'authentification
if (!isLoggedIn()) {
    redirect(getBaseUrl() . '/login.php');
}

// Vérifier une permission
if (!hasPermission('users.view')) {
    redirect(getBaseUrl() . '/error.php?code=403');
}
```

### Dans les Vues
Utiliser les fonctions de vérification des permissions :
```php
<?php if (hasPermission('users.create')): ?>
<a href="users.php?action=create" class="btn btn-primary">
    <i class="fas fa-plus"></i> Nouvel Utilisateur
</a>
<?php endif; ?>
```

## Maintenance

### Initialisation
Pour initialiser le système, exécuter :
```bash
php init_roles.php
```

### Test
Pour tester le système, exécuter :
```bash
php test_user_system.php
```

### Nettoyage
Supprimer les fichiers temporaires après utilisation :
- `init_roles.php`
- `test_user_system.php`
- `check_users_roles_structure.php`

## Support

Pour toute question ou problème :
1. Vérifier les logs d'erreur
2. Tester avec les scripts fournis
3. Vérifier les permissions de l'utilisateur
4. Contacter l'administrateur système


