IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Personnaliser l'erreur 403 (access denied) [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut Personnaliser l'erreur 403 (access denied)
    Bonjour,

    J'essaie de personnaliser la page "Access Denied" sur Symfony2.

    Extrait de mon security.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        firewalls:
            secured_area:
                pattern:  ^
                access_denied_url: /forbidden
                form_login:
                    check_path: /login_check
                    login_path: /login
                    username_parameter: loginName
                    password_parameter: password
                    use_referer: true
                logout:
                    path:   /logout
                    target: /
     
        access_control:
            - { path: ^/forbidden$, roles: [ ROLE_INACTIVE, ROLE_ACTIVE_CC_PROBLEM, ROLE_ACTIVE_NO_ACCESS ] }
            - { path: ^, role: ROLE_ACTIVE }
    Routing correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    forbidden:
        pattern: /forbidden
        defaults: { _controller: SellermaniaSellerBundle:Default:forbidden }
    2 choses me perturbent :
    • Symfony2 n'écrit pas mon pattern "forbidden" dans l'URL quand il me redirige sur la page 403
    • Mon template a beau étendre le layout, les CSS ne sont pas chargées (en fait mal chargée), les href dans le <head> étant incomplets...


    Du coup ma page 403 personnalisée est blanche, pas du tout intégrée au site...

    Une idée ?
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Ce serait lié à un bug Assetic avec les pages redirigées sur Exception : http://trac.symfony-project.org/ticket/9502
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut
    Moi aussi j'ai beaucoup cherché afin de personnaliser la page "Access Denied" mais j'ai pas trouvé la solution.

    Donc si quelqu'un a trouvé une solution, merci de la partager.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    extrait de security.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            secured_area:
                pattern:  ^
                access_denied_url: /forbidden
     
       access_control:
            - { path: ^/error403$, roles: [ ROLE_INACTIVE, ROLE_ACTIVE_CC_PROBLEM, ROLE_ACTIVE_NO_ACCESS ] }
    extrait de routing.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    forbidden:
        pattern: /forbidden
        defaults: { _controller: MyCompanySellerBundle:Default:forbidden }
     
    error403:
        pattern: /error403
        defaults: { _controller: MyCompanySellerBundle:Default:error403 }
    Et mon controller DefaultController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /**
        * Route: forbidden
        *
        * @return type
        */
       public function forbiddenAction()
       {
          //FIXME: Un bug d'Assetic nous oblige à faire une redirection car sinon les CSS et images
          //        chargées via la fonction asset sont mal loadées dans le contexte d'une erreur 403
          return $this->redirect($this->generateUrl('error403'));
       }
     
       /**
        * Route: error403
        *
        * @return type
        */
       public function error403Action()
       {
          //TODO: Switcher sur le ROLE du user et le renvoyer vers la page correspondante
     
          $token = $this->get('security.context')->getToken();
     
          //Si user loggé
          if (isset($token))
          {
             $user = $this->get('security.context')->getToken()->getUser();
             $roles = $user->getRoles();
     
             switch ($roles[0])
             {
                //TODO: Page d'inscription
                case User::ROLE_INACTIVE: $mess = 'Redirection to SignUp form (INACTIVE)';
                   break;
                //TODO: Page de renseignement CB
                case User::ROLE_ACTIVE_CC_PROBLEM: $mess = 'Redirection to CB form (ACTIVE_CC_PROBLEM)';
                   break;
                //TODO: Page de réabonnement
                case User::ROLE_ACTIVE_NO_ACCESS: $mess = 'Redirection subscription form (ACTIVE_NO_ACCESS)';
                   break;
                default: $mess = 'Default redirection';
                   break;
             }
          }
          //Sinon, redirection sur logout -> renvoie sur login
          else
          {
             return $this->redirect($this->generateUrl('_security_logout'));
          }
     
          return $this->render('MyCompanySellerBundle:Default:error403.html.twig', array ('mess' => $mess));
       }
    Mon access_denied_url pointe vers forbiddenAction. Mais pour contourner le bug décrit dans ce sujet, je redirige vers une autre action (error403) qui fait sortir du contexte d'exception.

    Solution fournie par Michel salib ici : http://www.michelsalib.com/2011/03/a...e-in-symfony2/
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut
    OK, merci pc.bertineau pour l'info.
    Bon dev Symfony2

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 48
    Points
    48
    Par défaut
    Pour information, avec symfony 2.1, pas de problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Personnaliser message d'erreur d'access
    Par Michel Hubert dans le forum Access
    Réponses: 7
    Dernier message: 11/01/2014, 18h28
  2. [phpMyAdmin] Message d'erreur #1044 access denied for user
    Par kinezana dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 15/11/2012, 11h36
  3. erreur access denied pour commande mysql : DEBUTANT
    Par flamant dans le forum Administration
    Réponses: 1
    Dernier message: 19/07/2008, 01h29
  4. Réponses: 1
    Dernier message: 20/05/2008, 13h42
  5. Réponses: 3
    Dernier message: 14/01/2006, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo