PrestaConcept
Nos réalisations
Nos métiers
  • Découvrez nos métiers
  • Développement web sur mesure

    Nous développons en méthode agile des back sous le framework PHP Symfony, des front en Angular.

  • Maintenance d'applications

    Maintien en condition opérationnelle de votre plateforme Symfony.

  • Expertise Symfony

    Coaching, formation, audit et conseil.

  • Hébergement et Infogérance

    Une expertise de l'hébergement depuis plus de 15 ans et l’infogérance de centaines de machines en production actuellement.

  • Qui sommes nous
  • Découvrez Prestaconcept
  • PrestaConcept

    Notre histoire, nos convictions, notre vision... Découvrez ce qui nous anime !

  • L'équipe

    Plus de 15 ans minimum d'expérience sur Symfony.

  • Nos engagements RSE

    Une société engagée pour un numérique responsable.

  • Nos convictions

    Co-construction, transparence.. Les principes qui guident nos collaborations !

  • Nous rejoindre

    Envie de nous rejoindre ? Consultez nos offres !

  • Blog
    J'ai un projet Nous contacter
    J'ai un projet Nous contacter Menu
    • Accueil
    • Blog
    • Tech
    • Utilisateurs configurés dans un fichier

    Blog

    Utilisateurs configurés dans un fichier

    diy php security symfony sécurité users
    Yann Eugoné
    Yann Eugoné CTO
    Publié le mercredi 17 juin 2020

    Comment avoir une liste d'utilisateurs, configurée dans un fichier, non versionné et potentiellement différent d'un environnement à l'autre

    Lorsqu'il est question de faire une application sécurisée, se pose toujours la question : "comment sont stockés mes utilisateurs ?".

    Contexte

    Le composant symfony/security propose plusieurs solutions pour parvenir à vos fins.

    Souvent, les utilisateurs sont en base de données, accessibles via doctrine/orm : c'est pratique, flexible, pas trop compliqué et entièrement intégré. En revanche il vous faut une base de données.

    Il existe également la possibilité de définir les utilisateurs directement dans la configuration. Ça peut être très pratique pour un projet où créer un nouvel utilisateur n'est pas une tâche courante. Mais alors les utilisateurs sont identiques pour chaque environnement et versionnés.

    Cependant, il est possible de s'affranchir de ces 2 contraintes en quelques lignes de configuration.

    Prérequis

    Vous aurez besoin d'un symfony >= 4.3, car nous allons utiliser les Env Var Processors.

    Mise en place

    Tout d'abord, nous allons créer notre propre définition du InMemoryUserProvider, car celui qui est fabriqué par la méthode standard ne supporte malheureusement pas les variables d'environnement :

    # config/services.yaml
    parameters:
        env(USERS_FILE): '%kernel.project_dir%/config/users.json'
    
    services:
        app.config_user_provider:
            class: Symfony\Component\Security\Core\User\InMemoryUserProvider
            arguments:
                $users: '%env(json:file:resolve:USERS_FILE)%'
    

    C'est une définition de service classique, la seule spécificité c'est cette variable d'environnement et les transformations successives qu'on lui applique %env(json:file:resolve:USERS_FILE)%. Il faut simplement lire de droite à gauche pour comprendre ce qu'il se passe :

    • USERS_FILE est le nom de la variable d'environnement que l'on va utiliser
    • resolve va remplacer les paramètres dans la valeur de la variable
    • file va considérer le chemin interprété et faire un file_get_contents
    • json va transformer le contenu du fichier en json via json_decode

    Ensuite, nous allons déclarer notre user provider dans la sécurité symfony :

    # config/packages/security.yaml
    security:
        providers:
            config_user_provider:
                id: app.config_user_provider
    

    Il ne reste plus qu'à initialiser notre fichier qui va contenir nos utilisateurs :

    # config/users.json
    {
      "john_admin": {
        "password": "$2y$13$jxGxc ... IuqDju",
        "roles": [
          "ROLE_ADMIN"
        ]
      },
      "jane_admin": {
        "password": "$2y$13$PFi1I ... rGwXCZ",
        "roles": [
          "ROLE_ADMIN",
          "ROLE_SUPER_ADMIN"
        ]
      }
    }
    

    Et pour finir, pensez à ignorer ce fichier des fichiers versionnés, il suffira d'avoir la bonne version sur votre serveur d'exécution :

    # .gitignore
    /config/users.json
    

    Voilà ! symfony/thanks

    Blog

    Pour continuer votre lecture ...

    Tech

    Utilisation de Stopwatch et WebProfiler dans Symfony

    Par Yann Eugoné 09/11/2023

    Comment utiliser le composant Stopwatch et le WebProfilerBundle pour détecter les lenteurs de vos applications.

    Lire la suite
    Tech

    Le pattern Décorateur avec Symfony

    Par Yann Eugoné 16/03/2022

    Apprenez à découper votre code devenu trop complexe avec le pattern décorateur, en vous aidant de Symfony.

    Lire la suite
    Tech

    Comment désactiver certains listeners lors de certaines commandes

    Par Yann Eugoné 11/01/2022

    Une solution simple et élégante, utilisant l'injection de services tagués, pour vous donner la possibilité de désactiver certains listeners lors de l'exécution de certaines commandes.

    Lire la suite

    Vous avez un projet Laravel ?

    Nous sommes spécialisés en Symfony, et grâce à Web^ID, l’agence sœur du groupe Agile Invest, nous couvrons aussi toute l’expertise Laravel.

    Découvrir Web^ID

    Une question, un projet ?
    Planifiez un échange avec nous !

    Choisissez votre date
    PrestaConcept - Groupe Agile Invest
    5, imp. Morel, 69003 Lyon +33 (0)4 78 54 45 45
    Suivez-nous
    Ecoindex B

    Ce site internet est un site basse consommation. En savoir plus sur l'Ecoindex

    Nos réalisations

  • Logiciel de mise en conformité réglementaire
  • Application de suivi de production des centrales éoliennes
  • Outil d'aide à la décision
  • Portail client
  • Nos métiers

  • Développement sur-mesure
  • Reprise d'application Symfony
  • Expertise Symfony
  • Hébergement & Infogérance
  • Qui sommes-nous

  • PrestaConcept
  • Groupe Agile Invest
  • L'équipe
  • Engagement RSE
  • Blog

  • Tech
  • Méthodologie
  • PrestaConcept
  • RSE
  • © 2025 PrestaConcept
    Mentions légales Politique de confidentialité 🍪
    Retour en haut de page