requêtes sql dans custom field pour afficher des éléments selon droits ACL

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] requêtes sql dans custom field pour afficher des éléments selon droits ACL

    Bonjour,
    Je ne sais pas si je suis au bon endroit. N'hésitez pas à me le dire car il s'agit d'une demande sur requêtes sql sachant que je ne sais plus trop faire et que je n'ai pas trouvé le schéma des tables joomla 3.x mais seulement le descriptif de la table https://docs.joomla.org/Tables/contact_details

    J’utilise le champ personnalisé sql qui permet de lister un certain nombre d'éléments.
    Cela fonctionne bien. Je voudrai maintenant ajouter des clauses pour ne pas afficher des éléments dont l’internaute n'a pas accès. Je cherche à faire cela sur la liste des contacts (voir articles si différent) Joomla.

    requête sur les tags
    Code:
    Code:
    SELECT "" as value,"- choisir une valeur -" as text
    UNION ALL
    SELECT `id` as value, `name` as text FROM #__contact_details WHERE catid=17
    Je souhaite l'affichage des éléments uniquement autorisés selon les droits du membre.
    Ex: un contact visible seulement pour l'admin ne devrait pas s'afficher dans la liste pour un visiteur ou membre

    @+
    Dernière édition par herve à 17/04/2020, 12h44
    Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

  • #2
    Bonjour
    J'ai modifié ma demande
    @+
    Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

    Commentaire


    • #3
      Envoyé par herve Voir le message
      Bonjour,
      Je ne sais pas si je suis au bon endroit. N'hésitez pas à me le dire car il s'agit d'une demande sur requêtes sql sachant que je ne sais plus trop faire et que je n'ai pas trouvé le schéma des tables joomla 3.x mais seulement le descriptif de la table https://docs.joomla.org/Tables/contact_details
      Une requête sql ou directement dans phpmyadmin et tu trouveras la structure de chaque table de la DB.

      Envoyé par herve Voir le message
      J’utilise le champ personnalisé sql qui permet de lister un certain nombre d'éléments.
      Cela fonctionne bien. Je voudrai maintenant ajouter des clauses pour ne pas afficher des éléments dont l’internaute n'a pas accès. Je cherche à faire cela sur la liste des contacts (voir articles si différent) Joomla.

      requête sur les tags
      Code:
      Code:
      SELECT "" as value,"- choisir une valeur -" as text
      UNION ALL
      SELECT `id` as value, `name` as text FROM #__contact_details WHERE catid=17
      Je souhaite l'affichage des éléments uniquement autorisés selon les droits du membre.
      Ex: un contact visible seulement pour l'admin ne devrait pas s'afficher dans la liste pour un visiteur ou membre

      @+
      Ceci signifie que tu as donné un niveau d'accès sur chaque fiche "contact".

      Il faut donc que tu trouves tous les acess-level de l'utilisateur courant et que tu vérifies si le niveau d'accès de la fiche y figure.

      Pour avoir la première information pour l'injecter dans une clause SELECT IN de la requête, il faut programmer...

      ...donc écrire un custom-field spécifique.
      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
      Rejoignez le Joomla Users Groupe Alsace...
      roland_d_alsace va-t-il devenir roland_du_grand_est ?

      Commentaire


      • #4
        Bonsoir,
        oups pas vu passé ta réponse. Bon je ne comprends pas.
        La requête que je montre est dans le custom field sql !
        J'ai essayé de regarder avec le débogueur de joomla la requête sql, mais cela devient complexe car prend en compte toutes les tables.
        En essayant de la créer à partir de zéro, comment scruter chaque fiche contact pour voir si on l'autorise à s'afficher dans la liste?
        Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

        Commentaire


        • #5
          Hello.

          J'expliquai que à mon avis ce n'est pas possible avec le custom fields sql natif, car il faut connaitre la liste des accès-level de l'utilisateur courant.

          Dans la requête SQL c'est à toi de gérer toutes les conditions de la dite requête.

          Il faut donc comparer cette liste des accès-level de l'utilisateur courant avec l'accès-level défini dans la fiche (mais aussi avec l'acces-level défini dans la catégorie de la fiche si l'on veut être vraiment en règle avec les ACL).

          Mais comment récupérer cette liste des "accès level" de l'utilisateur actuel ?

          ...il faut donc coder un peut pour se créer un autre custom field ce qui te permettrait ceci.

          Il existe peut-être un "custom-field sql" avec des tags qui permettrait d'utiliser des valeurs de l'environnement dans la requête sql ?
          A voir dans le JED.

          Sinon, si tu sais coder du PHP, le + simple serait de repartir du custom-field en question et d'en faire un spécifique qui rajouterait le lien avec la table #__categories et les conditions adéquates en s'inspirant de la méthode getListQuery de /components/com_contact/model/category.php

          1) Retrouver les access level de l'utilisateur courant :
          Code PHP:
          $user JFactory::getUser();
          $groups implode(','$user->getAuthorisedViewLevels()); 
          2) Vérifier que l'acces-level de la fiche est autorisé
          Code PHP:
          $query->where('a.access IN (' $groups ')'); 
          3) Lier avec la catégorie
          Code PHP:
          $query->join('LEFT''#__categories AS c ON c.id = a.catid'
          4) Vérifier que l'accès-level de la catégorie est autorisé
          Code PHP:
          $query->where('c.access IN (' $groups ')'); 
          Dernière édition par roland_d_alsace à 20/04/2020, 11h25 Raison: ajout code php
          woluweb aime ceci.
          A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
          Rejoignez le Joomla Users Groupe Alsace...
          roland_d_alsace va-t-il devenir roland_du_grand_est ?

          Commentaire


          • #6
            Bonjour,
            Ok merci pour la précision.
            Je comprends que c'est plus compliqué que prévu. j'y réfléchis.
            Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

            Commentaire


            • #7
              euh, sans rien faire on peut déjà mettre un Custom Field sur "registered" ou "super user". J'ai justement testé ça l'autre jour et ça fonctionne tout à fait normalement (comme pour un article)
              Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

              Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

              Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

              Commentaire


              • #8
                Envoyé par woluweb Voir le message
                euh, sans rien faire on peut déjà mettre un Custom Field sur "registered" ou "super user". J'ai justement testé ça l'autre jour et ça fonctionne tout à fait normalement (comme pour un article)
                Oui, il y a possibilité de mettre un acces-level sur chaque groupe de custom fields et/ou sur chaque custom field.

                J'avais fait une démo en affichant certains champs et groupes de champs différents selon les droits d'accès de l'internaute connecté (ou pas) lors de ma présentation.

                Dans le cas particulier de cette discussion, ceci signifierait qu'il faut faire pour chaque niveau d'accès un curstom-field différent, avec ce niveau d'accès, et reprendre son id dans la requete sql du dit champ.

                C'est très lourd et ne marcherait de toute façon pas vraiment car si un user à plusieurs access-level qui correspondent il y aurait du coup plusieurs fois l'affichages du même champ.
                A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                Rejoignez le Joomla Users Groupe Alsace...
                roland_d_alsace va-t-il devenir roland_du_grand_est ?

                Commentaire


                • #9
                  tout à fait.
                  Tout dépend du besoin exact en fait
                  Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

                  Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

                  Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

                  Commentaire


                  • #10
                    Bonsoir
                    Envoyé par woluweb Voir le message
                    euh, sans rien faire on peut déjà mettre un Custom Field sur "registered" ou "super user". J'ai justement testé ça l'autre jour et ça fonctionne tout à fait normalement (comme pour un article)
                    En précisant:
                    Liste des contacts dans un formulaire de soumission d'articles via le front-end
                    Vue par le visiteur:
                    • contact1
                    • contact3
                    • contact5
                    Vu par un autre membre connecté avec un rôle supérieur (ex.: admin)
                    • contact1
                    • contact2 (seul admin peut le voir)
                    • contact3
                    • contact4 (seul admin peut le voir)
                    • contact5
                    C'est ce que fait nativement Joomla pour toutes ces listes sauf que ce n'est probablement une seule requête !

                    woluweb
                    uisque tu aimes aussi les custom field; pour infos, l'auteur de https://extensions.joomla.org/extens...s-good-search/ a accepté d'ajouter les filtres sur les contacts :-)
                    Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X