- Corrige l'erreur SQL 'Unknown column fk_operation in users' - L'opération active est récupérée depuis operations.chk_active = 1 - Jointure avec users pour filtrer par entité de l'admin créateur - Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
4.4 KiB
Executable File
4.4 KiB
Executable File
Changements de validation des usernames - Version ultra-souple
Date : 17 janvier 2025
Contexte
Suite aux problèmes d'erreurs 400 et au besoin d'avoir une approche plus moderne et inclusive, les règles de validation des usernames ont été assouplies pour accepter tous les caractères UTF-8, similaire à l'approche NIST pour les mots de passe.
Anciennes règles (trop restrictives)
- ❌ 10-30 caractères
- ❌ Doit commencer par une lettre minuscule
- ❌ Seulement : a-z, 0-9, ., -, _
- ❌ Pas d'espaces
- ❌ Pas de majuscules
- ❌ Pas d'accents ou caractères spéciaux
Nouvelles règles (ultra-souples)
- ✅ 8-30 caractères UTF-8
- ✅ Tous caractères acceptés :
- Lettres (majuscules/minuscules)
- Chiffres
- Espaces
- Caractères spéciaux (!@#$%^&*()_+-=[]{}|;:'"<>,.?/)
- Accents (é, è, à, ñ, ü, etc.)
- Émojis (😀, 🎉, ❤️, etc.)
- Caractères non-latins (中文, العربية, Русский, etc.)
- ✅ Sensible à la casse (Jean ≠ jean)
- ✅ Trim automatique des espaces début/fin
- ✅ Unicité vérifiée dans toute la base
Exemples de usernames valides
Noms classiques
Jean-PierreMarie Claire(avec espace)O'ConnorJosé García
Avec chiffres et caractères spéciaux
admin2024user@companytest_user#1Marie*123!
International
李明(chinois)محمد(arabe)Владимир(russe)さくら(japonais)Παύλος(grec)
Modernes/Fun
🦄UnicornPlayer_1 🎮☕Coffee.Lover2024_User
Exemples de usernames invalides
short❌ (moins de 8 caractères)❌ (espaces seulement)very_long_username_that_exceeds_thirty_chars❌ (plus de 30 caractères)
Modifications techniques
1. Code PHP (UserController.php)
// Avant (restrictif)
if (!preg_match('/^[a-z][a-z0-9._-]{9,29}$/', $username))
// Après (ultra-souple)
$username = trim($data['username']);
$usernameLength = mb_strlen($username, 'UTF-8');
if ($usernameLength < 8) {
// Erreur : trop court
}
if ($usernameLength > 30) {
// Erreur : trop long
}
// C'est tout ! Pas d'autre validation
2. Base de données
-- Script à exécuter : scripts/sql/migration_username_utf8_support.sql
ALTER TABLE `users`
MODIFY COLUMN `encrypted_user_name` varchar(255) DEFAULT '';
3. Messages d'erreur simplifiés
- Avant : "Format du nom d'utilisateur invalide (10-30 caractères, commence par une lettre, caractères autorisés: a-z, 0-9, ., -, _)"
- Après :
- "Identifiant trop court" + "Minimum 8 caractères"
- "Identifiant trop long" + "Maximum 30 caractères"
- "Identifiant déjà utilisé"
Impact sur l'expérience utilisateur
Avantages
- Inclusivité : Support de toutes les langues et cultures
- Modernité : Permet les émojis et caractères spéciaux
- Simplicité : Règles faciles à comprendre (juste la longueur)
- Flexibilité : Les utilisateurs peuvent choisir l'identifiant qu'ils veulent
- Moins d'erreurs : Moins de rejets pour format invalide
Points d'attention
- Support client : Former le support aux nouveaux formats possibles
- Affichage : S'assurer que l'UI supporte bien l'UTF-8
- Recherche : La recherche d'utilisateurs doit gérer la casse et l'UTF-8
- Export : Vérifier que les exports CSV/Excel gèrent bien l'UTF-8
Sécurité
Pas d'impact sur la sécurité
- ✅ Les usernames sont toujours chiffrés en base (AES-256-CBC)
- ✅ L'unicité est toujours vérifiée
- ✅ Les injections SQL sont impossibles (prepared statements)
- ✅ Le trim empêche les espaces invisibles
Recommandations
- Continuer à générer automatiquement des usernames simples (ASCII) pour éviter les problèmes
- Mais permettre la saisie manuelle de tout format
- Logger les usernames "exotiques" pour détecter d'éventuels abus
Tests
- Script de test disponible :
/tests/test_username_validation.php - Teste tous les cas limites et formats internationaux
Rollback si nécessaire
Si besoin de revenir en arrière :
- Restaurer l'ancienne validation dans UserController
- Les usernames UTF-8 existants continueront de fonctionner
- Seuls les nouveaux seront restreints
Conclusion
Cette approche ultra-souple aligne les usernames sur les standards modernes d'inclusivité et d'accessibilité, tout en maintenant la sécurité grâce au chiffrement et à la validation de l'unicité.