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 :

Admin generator: Restreindre l'accès des formulaires edit


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut Admin generator: Restreindre l'accès des formulaires edit
    Supposons qu'on ai un admin generator avec un module "articles". Chaque article est lié à un pays, et on veut restreindre l'accès de chaque utilisateur admin aux pays auxquels il a droit (Chaque utilisateur admin est lié à un ou plusieurs pays via une table de jointure user_pays).

    Parmis les autre modules du backend, plusieurs autres modules ont des objets également liés à un pays.

    Pour implémenter ce genre de restriction d'accès dans tous les modules, est-on obligé de surcharger chaque méthode executeEdit et chaque méthode executeUpdate pour ajouter une redirection si le pays de l'objet ne fait pas partie des pays autorisés pour cet utilisateur ?

    Ou bien y a t'il plus simple, peut-être en créant un credential pour chaque pays que le user a le droit de consulter ? A moins qu'il y a encore plus simple ?

    Si quelqu'un a déjà réalisé ce genre de restriction, ou a éventuellement une idée pour l'implémenter de façon simple, j'aimerai avoir vos avis.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Ce genre de restriction serait-elle réalisable avec une méthode du controller qui serait appelée automatiquement pour chaque action. Ce qui pourrait donner quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      public function executeEach??(sfWebRequest $request)
      {
        if($this->getRoute()->getObject() && $this->getRoute()->getObject()->getCodePays() != $this->getUser()->Profile->getCodePays()) {
          $this->forward(sfConfig::get('sf_secure_module'), sfConfig::get('sf_secure_action'));
        }
      }
    Mais est-ce est-ce faisable de forcer l'appel d'une méthode du controller pour chaque action ? Peut-être en surchargeant le constructeur ?

    Si on veut limiter l'accès de plusieurs modules de cette façon, y a t'il moyen de le faire avec un code encore plus factorisé ?

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu as plusieurs solution.

    Manifestement, les groupes et hasMember() ne sont pas ta solution.

    Dans un module admin, tu as aussi une classe Action qui doit ressembler à ça pour une table nommée user et un module nomé user_admin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class user_adminActions extends autoUser_adminActions
    {
    }
    Frugal non ?

    Rien ne t'empêche de la surchargée avec ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function executeEdit(sfWebRequest $request)
    {
       //mon code de contrôle
       parent::executeEdit($request);
    }
    Dans tous les objets sfAction tu as une méthode pré execute et une post execute exécuté avant et après l'action. Tu peux parfaitement les surcharger aussi en pensant à l'appel du parent.


    Autre solution, symfony utilise une route de type sfDoctrineRouteCollection pour récupérer la liste et l'enregistrement en cours d'édition. Tu peux modifier ton fichier routing.yml et préciser, pour la route de ce module, les méthodes à utiliser dans ton objet du model pour récupérer la liste et/ou l'objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    model_methods:
      list:   getMaListe
      object: getMonObjet
    A toi de modifier ton modèle pour que la méthode getMaListe retourne une Doctrine_collection des enregistrements pour la liste et la méthode getMonObjet un objet. Tu peux y intégrer les vérifications nécessaires aux autorisations de l'utilisateur et, le cas échéant, envoyer sur un forward404()...

    C'est la méthode que j'utiliserais.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Ok, merci Mimi de ta réponse, une fois de plus

    Je pense que la solution du routing.yml est le plus approprié pour ce que je veux faire. Je vais m'orienter vers cette solution.

Discussions similaires

  1. [Security] Restreindre l'accès à des champs dans une page
    Par longbeach dans le forum Spring
    Réponses: 2
    Dernier message: 30/03/2011, 20h44
  2. Edition des Form des Formulaires dans VBA
    Par GuixInDaMixx dans le forum IHM
    Réponses: 4
    Dernier message: 23/04/2008, 23h17
  3. [HTML] Restreindre l'accès à des pages HTML
    Par veevee dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 13/04/2008, 21h30
  4. [Forms]accès à des formulaires Oracle via le WeB
    Par habasque dans le forum Forms
    Réponses: 8
    Dernier message: 17/05/2007, 18h49
  5. Restreindre l'accès des fichiers..
    Par Neilos dans le forum Windows
    Réponses: 6
    Dernier message: 25/08/2004, 00h22

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