Connected as admin and user

Par SiProdZz, il y a 3 ans


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, il y a 3 ans

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 ^^

Akli Ouamara, il y a 3 ans

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, il y a 3 ans

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.