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