Bonjour à tous et merci d'avance.

Je souhaite être connecté en tant qu'administrateur lorsque je suis sur /admin
Et connecté en tant qu'utilisateur pour le reste.

J'ai une entité Admin et une entité User.

Je tente de configurer mon fichier security.yaml mais je bloque. Merci d'avance.

security:
    enable_authenticator_manager: true
    encoders:
        App\Entity\Admin:
            algorithm: auto

    providers:
        user:
            entity:
                class: App\Entity\User
        admin:
            entity:
                class: App\Entity\Admin
                property: email
        api:
            entity:
                class: League\Bundle\OAuth2ServerBundle\Security\Authentication\Provider\OAuth2Provider
                # Trikoder vs League Bundle : https://github.com/trikoder/oauth2-bundle/pull/292#issuecomment-990943939
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        translations:
            pattern: ^/translations
            security: false
        api_token:
            pattern: ^/api/token$
            security: false
        api_doc:
            pattern: ^/api/doc
            security: false
        api:
            pattern: ^/api
            security: true
            stateless: true
            oauth2: true
            provider: api

        admin:
            user_checker: App\Security\UserChecker
            pattern: /admin(.*)
            provider: admin
            context: main
            remember_me:
                secret: '%kernel.secret%'
                lifetime: 604800 # 1 week in seconds
                path: /admin
            form_login:
                provider: admin
                login_path: admin_login
                check_path: admin_login
                default_target_path: /admin/
            logout:
                path: admin_logout
                target: admin_login
                invalidate_session: true
            switch_user: { role: ROLE_SUPER_ADMIN, parameter: _switch_user }
            access_denied_url: /admin/login
        main:
            context: main
            guard:
                provider: cas
                authenticators:
                    - app.cas_authenticator
            switch_user:
                provider: user
            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#firewalls-authentication

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: ROLE_SUPER_ADMIN }
        - { path: ^/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api, role: IS_AUTHENTICATED_FULLY }
        - { path: ^/bulk-populate$, role: ROLE_GROUPS }
        - { path: ^/bulk-populate/, role: ROLE_GROUPS }
        - { path: ^/bulk-group-create, role: ROLE_GROUPS }
        - { path: ^/bulk-populate_jury_decision, role: ROLE_JURY }
        - { path: ^/, allow_if: "is_granted('ROLE_USER') and not is_granted('ROLE_SUPER_ADMIN')" }

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

Ce que je veux

Si j'accès à une route "/admin" je souhaite être connecté en tant qu'administrateur
Sinon je suis connecté en tant qu'utilisateur utilisé pour me connecter

Ce que j'obtiens
J'arrive à me connecter à la connexion du projet en tant qu'utilisateur.
Si je vais sur une route /admin, j'arrive à me connecter en tant qu'administrateur.

J'ai donc deux sessions en sauvegarde sans soucis.

Si je retourne sur le projet sans me déconnecter de l'admin, j'obtiens une erreur car j'ai bloqué la possibilité de ce connecté au projet en tant qu'admin.
J'aimerai à ce moment là qu'il récupère la session Utilisateur sans se déconnecter de l'admin.

Merci d'avance.

3 réponses


SiProdZz
Auteur

Up

Une fois connecté en tant qu'administrateur.
Si je retour sur la page d'accueil du projet. J'ai l'erreur accès refusé.
Le profiler m'indique que je suis connecté en tant que administrateur mais que j'utilise le firewall "main".

Je suis un peu perdu ^^

bonsoir
tu n'as pas a cree deux entite user et admin mais c'est le role attribuer a un utilisateur qui defini le niveau d'acces.
si tu veux que les page qui commence par /admin soit accessible par le role administrateur il suffit de le preciser dans security.yaml a condition de definir le role administrateur dans la base de donnee sur l'utilisateur voulu

SiProdZz
Auteur

Oui bien sûr. Il y a deux entités car c'est un projet déjà existant.
Dans tous les cas je ne veux pas que mes deux utilisateurs puissent faire la même chose.
Un utilisateur peut manipuler le projet.
Mon administrateur lui gère le back.

Merci en tout cas d'avoir pris le temps de répondre à ma demande. Je suis toujours en recherche.