Gestion des ACL Admin de mon composant

Réduire
Ce sujet est fermé.
X
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Gestion des ACL Admin de mon composant

    Bonjour à toutes et tous !

    Voilà je viens vous voir car j'aimerais régler une problématique qui me tiens à cœur à savoir la gestion des ACL au niveau de l'admin de mon composant.

    On va dire que j'ai fait plus de la moitié du chemin car j'ai réussi à :
    - afficher le panneau de gestion des droits pour les droits globaux appliqués aux composant (dans la modal "paramètres");
    - réussi à enregistrer les droits globaux pour l'utilisation du composant;
    - afficher le panneau de gestion des droits dans le formulaire de création d'élément, afin que le gestionnaire puisse définir des droits spécifiques pour chaque élément à l''instar des articles de "com_content";
    - réussi à enregistrer les droits pour chaque éléments dans la table "assets", au niveau de l'entrée correspondant aux élements;

    Alors j'ai 1 question est 1 problème :

    La question : au niveau du formulaire de création d’élément, comment prédéfinir les droits (préselectionner les valeurs ??), je pourrais le faire avec du JS mais ça ferait pas très propre...

    Le problème : au niveau des éléments, le système ne veut pas redéfinir les droits comme je le souhaite...
    exemple : pour le groupe "gestionnaire", si la valeur initiale de "supprimer" est "refusé", et que j'enregistre avec la valeur "autorisé", joomla me renvoi le panneau avec la mention "conflit" : voir la copie d'écran en fichiers joints.

    Lien vers la copie d'écran

    Par contre je n'ai pas ce souci là avec les droits globaux du composant...

    J'ai jamais vus ça... pourquoi est ce que ça me met çà ??

    Ci dessous l'objet définissant les droits pour l’élément... j'ai un peu du mal à le décrypter d'ailleur...
    Code:
    object(stdClass)[133]
      public 'core.delete' => 
        object(stdClass)[180]
          public '1' => string '0' (length=1)
          public '6' => string '1' (length=1)
          public '7' => string '0' (length=1)
          public '2' => string '0' (length=1)
          public '3' => string '0' (length=1)
          public '4' => string '0' (length=1)
          public '5' => string '0' (length=1)
          public '8' => string '0' (length=1)
      public 'core.edit' => 
        object(stdClass)[181]
          public '1' => string '0' (length=1)
          public '6' => string '1' (length=1)
          public '7' => string '0' (length=1)
          public '2' => string '0' (length=1)
          public '3' => string '0' (length=1)
          public '4' => string '0' (length=1)
          public '5' => string '0' (length=1)
          public '8' => string '0' (length=1)
      public 'core.edit.state' => 
        object(stdClass)[182]
          public '1' => string '0' (length=1)
          public '6' => string '1' (length=1)
          public '7' => string '0' (length=1)
          public '2' => string '0' (length=1)
          public '3' => string '0' (length=1)
          public '4' => string '0' (length=1)
          public '5' => string '0' (length=1)
          public '8' => string '0' (length=1)
    Merci d'avance pour votre aide et vos lumières et bonne fin de semaine !!
    Fichiers joints
    Dernière édition par Soundboy39 à 09/08/2013, 10h13 Raison: PJ de mauvaise qualitée

  • #2
    Re : Gestion des ACL Admin de mon composant

    Bonjour,

    Envoyé par Soundboy39 Voir le message
    La question : au niveau du formulaire de création d’élément, comment prédéfinir les droits (préselectionner les valeurs ??), je pourrais le faire avec du JS mais ça ferait pas très propre...
    Dans ce cadre, le field est de type "rules" ? Si oui, avec JModelForm => loadFormData y'a peut-être des possibilités, je n'ai pas testé.

    Envoyé par Soundboy39 Voir le message
    Le problème : au niveau des éléments, le système ne veut pas redéfinir les droits comme je le souhaite...
    exemple : pour le groupe "gestionnaire", si la valeur initiale de "supprimer" est "refusé", et que j'enregistre avec la valeur "autorisé", joomla me renvoi le panneau avec la mention "conflit" : voir la copie d'écran en fichiers joints.
    Ex:
    On a 3 groupes: A, B et C.
    Avec cette arborescence:
    - A
    --B
    -C
    B dépend donc de A.

    Si chaque groupe possède des droits, le fils hérite du parent, donc si A interdit l'action xyz, la méthode xyz de B l'est aussi.
    Ainsi, si on veut que B ne soit plus interdit il faut que A ne le soit pas.

    J'espère être claire et ne pas me tromper.
    ----
    Je t'ai aidé? Remercie moi, rien de plus

    Commentaire


    • #3
      Re : Gestion des ACL Admin de mon composant

      merci pour la réponse,

      Oui j'utilise bien un champ de type "rules".
      J'ai regardé du côté de "loadFormData()", apparemment cette methode ne sert pas à grand chose... puisqu'elle se contente de retourner un tableau vide.

      Sinon au niveau de l'héritage j'ai bien compris comment ça fonctionne, c'est justement illogique que "Gestionnaire" reste bloqué alors qu'il est au même niveau que SuperAdministrateur. J'ai essayé de créer un élément avec un compte en statut Gestionnaire et j'ai le même problème, en moment de la création "Gestionnaire" et bien "Autorisé", mais dès que j'enregistre il repasse en "Non autorisé - vérouillé" avec "conflit".

      Je n'y comprend plus rien... quelle galère ces ACL !!

      Commentaire


      • #4
        Re : Gestion des ACL Admin de mon composant

        "getForm()" va te permettre de récuperer ton formulaire, dans cette méthode tu va faire appel à "loadForm" pour faire reference à ton XML, à partir de la tu as ton object JForm sur lequel tu peut agir.

        La méthode "loadForm()" contient un attribut $options, dans lequel tu peut choisir de vouloir faire inclure les valeurs dans le form "$options['load_data']", avec cette option, tu fait appel à "loadFormData()".

        Libre à toi de définir cette méthode pour par exemple injecter les données sauvegarder en session, manipuler à la volée...

        Voila pour illustrer un peu plus
        Code PHP:
        protected function loadFormData()
        {
            
        // From session....
            
        $data JFactory::getApplication()->getUserState('com_composant.action.view.data', array());

            
        // From model ....
            
        if (empty($data))
            {
                
        $data $this->getItem();
            }

            
        // custom setter
            
        $data->set('nomduchamp','unevaleur');
            
        //        ou
            
        $data['nomduchamp'] = 'unevaleur';

            return 
        $data;

        EDIT: maj du code
        Dernière édition par dev_ate à 11/08/2013, 12h22
        ----
        Je t'ai aidé? Remercie moi, rien de plus

        Commentaire


        • #5
          Re : Gestion des ACL Admin de mon composant

          re,

          Je pense avoir trouvé la solution pour pre-remplir les champs, par contre le problème est située en amont.

          En fait c'est la chaine JSON qui n'est pas bonne, je la définie en transformant directement le tableau envoyé via $_POST avec la fonction json_encode. Apparemment ce n'est pas la bonne méthode, car quand je compare ma chaine à celles des éléments des autres composants cela n'a rien à voir. Et quand je tente de soumettre ma chaine à la methode setRules() (qui me permettra, je l’espére, de pré-remplir mes champs), celle-ci retourne un tableau vide, alors que si je soumet une chaine issue d'un autre élément elle me retourne bien un tableau correctement formaté.

          Est ce que quelqu'un sait comment obtenir une chaine correctement formatée compatible avec le système de Joomla ?? Merci d'avance et bonne journée !

          Commentaire


          • #6
            Re : Gestion des ACL Admin de mon composant

            Envoyé par Soundboy39 Voir le message
            En fait c'est la chaine JSON qui n'est pas bonne, je la définie en transformant directement le tableau envoyé via $_POST avec la fonction json_encode. Apparemment ce n'est pas la bonne méthode, car quand je compare ma chaine à celles des éléments des autres composants cela n'a rien à voir.
            Je t'invite à relire mon post juste ci-dessus.

            Envoyé par Soundboy39 Voir le message
            Et quand je tente de soumettre ma chaine à la methode setRules() (qui me permettra, je l’espére, de pré-remplir mes champs), celle-ci retourne un tableau vide, alors que si je soumet une chaine issue d'un autre élément elle me retourne bien un tableau correctement formaté.
            Dans ce cas, ces règles serons lié à la table asset, je t'invite à regarder du coté de JAccessRules.
            Une fois de plus pour pré-remplir tes champs, regarde mon post ci-dessus.

            Bon courage.
            ----
            Je t'ai aidé? Remercie moi, rien de plus

            Commentaire


            • #7
              Re : Gestion des ACL Admin de mon composant

              Ca y est j'ai réussi !!

              En fait il faut retirer le niveau "publique", c'est à dire "1" de la liste des règles !! Et après tous baigne !

              Je vous met le code de ma "fonction maison" utilisée au moment de l'enregistrement de l’élément :

              Code PHP:
              private function storeACL($elem_id FALSE)
                  {
                      if(
              is_int($elem_id) == TRUE)
                      {
                          
              //Mise à Jour de l'ACL pour l'element
                          
              $db = & JFactory::getDBO();
                          
              $db->setQuery('SELECT asset_id FROM #__elements WHERE id = '.$elem_id);
                          
              $res $db->loadObject();
                          
              $asset_id $res->asset_id;
                          
                          
              $db->setQuery('SELECT * FROM #__assets WHERE id = '.$asset_id);
                          
              $asset $db->loadObject();
                          
                          
              $post JRequest::getVar('jform');
                          
                          
              $rules_array $post['rules'];

                                      
              //Supprime les entrées relatives au niveau publique (je n'ai pas trouvé de fonction existantes pour le faire...)
                          
              foreach($rules_array as $rules_type_key => $rules_type_val)
                          {
                              foreach(
              $rules_type_val as $rule_key => $rule_val)
                              {
                                  if(
              $rule_key == '1') : unset($rules_array[$rules_type_key][$rule_key]); endif;
                              }
                          }

                                      
              //Formate la liste des règles dans une chaine
                          
              $rules = new JAccessRules($rules_array);
                          
              $asset->rules $rules->__toString();    
                          
                          
              $db->updateObject('#__assets'$asset'id');
                      }
                  } 
              Et voilà, maintenant il ne reste plus qu'à les faire appliquer ces droits !! L’aventure continue !!

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X