We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6574
    • 22 Posts
    Bonjour,

    Voila, je mettre en place le systeme suivant :
    On assigne des utilisateurs à un groupe d’utilisateurs, et on publie des documents autorisant tel ou tel groupe d’utilisateur a y acceder. L’internaute se log avec son login et son mot de passe, on verifie si l’utilisateur fait partit du bon groupe.
    C’est le bon groupe => On affiche la page
    C’est pas le bon => "Désolé, vous ne pouvez pas acceder à cette page".

    En dur je vois comment le faire, c’est pas bien compliqué, mais le but est que je passe par un template afin que lorsqu’on crée une nouvelle page, on obtienne le groupe recquis seulement j’ai beau chercher je ne trouve pas de placeholder, de commande permettant cela. J’ai aperçu un getDocGroups () mais sans doc.

    Je vous remercie par avance,

    Alexandre
      • 11975
      • 2,542 Posts
      Salut,

      normalement ce doit être le comportement par défaut de WebLogin de renvoyer une page vers une page d’erreur si les droits du visiteur sont insuffisants.

      Quel snippet utilises tu pour la connection des membres.
      Sinon il y a PHx pour valider l’appartenance à un groupe voir les modifiers mo=``

      :-)
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 6574
        • 22 Posts
        EN y reflechissant, je pense que c’est "facilement" faisable en faisant la chose suivante :
        En se logant, on stocke le groupe auquel l’utilisateur, et ensuite on compare l’id du groupe auquel le document est rattaché, au groupe de l’utilisateur entré du style :
        $log = sprintf("SELECT * FROM modx_web_users WHERE username = %s AND password = %s",
        				GetSQLValueString($_REQUEST['username'], "text"),
        				GetSQLValueString(md5($_REQUEST['password']), "text"));
        		$logok = mysql_query($log, $db) or die(mysql_error());
        		$row_log = mysql_fetch_assoc($logok);
                        $totalRows_log = mysql_num_rows($logok);
        
        if ($totalRows_log != 0) {
        
        $id_user=$row_log['id'];
        
        setcookie ('login',$id_user);
        
        $groupe = "SELECT * FROM modx_web_groups WHERE webuser='".$id_user."'";
        $groupeok = mysql_query($groupe, $db) or die(mysql_error());
        $row_groupe = mysql_fetch_assoc($groupeok);
        
        setcookie ('groupe',$row_groupe['webgroup']);
        
        		}
        
        

        $doc ="SELECT * FROM `modx_document_groups` WHERE document='".$_REQUEST['id']."'"
        $docok = mysql_query($doc, $db) or die(mysql_error());
        $row_doc_group = mysql_fetch_assoc($docok);
        
        if($row_doc_group['document_group']==$_COOKIE['groupe']){
        On affiche la page}else{echo "Désolé, vous ne pouvez pas acceder à cette page";
        

          • 6574
          • 22 Posts
          Quote from: heliotrope at Sep 04, 2008, 08:18 AM

          Salut,

          normalement ce doit être le comportement par défaut de WebLogin de renvoyer une page vers une page d’erreur si les droits du visiteur sont insuffisants.

          Quel snippet utilises tu pour la connection des membres.
          Sinon il y a PHx pour valider l’appartenance à un groupe voir les modifiers mo=``

          :-)

          J’ai du mal a assimiler les snippets. J’ai compris Wayfinder. J’ai pourtant l’habitude de me prendre la tete avec la programmation...

          Mais ça va venir, je viendrai à bout de modx
            • 6574
            • 22 Posts
            Bon je savai que cette solution était trop simple pour fonctionner.

            Lorsque j’essaye d’acceder à la page protéger par des groupe d’utilisateur, je suis automatiquement renvoyer vers la premiere page du site. Il arrive donc pas à savoir si je fais bien partit du groupe d’utilisateur requis.

            Comment modx gère-t-il ça ? Y a-t-il un cookie en particulier qu’il recherche ? Ou est ce une session ?
              • 6574
              • 22 Posts
              Bon ce qui suit fonctionne comme je le desire :

              On a une page avec un formulaire comprenant un username et un password :
              <form id="form1" name="form" method="post" action="log.php">
                   <br />
                   <br />
                   <br />
                          <table width="400" border="0" align="center" cellpadding="0" cellspacing="5">
                            <tr>
                              <td align="right"><span class="Style1">Login : </span></td>
                              <td><input name="username" type="text" id="username" size="20" value="<?=$_REQUEST['username']?>"/></td>
                            </tr>
                            <tr>
                              <td align="right" class="Style1">Mot de passe : </td>
                              <td><input name="password" type="text" id="password" size="20" /></td>
                            </tr>
                            <tr>
                              <td colspan="2" align="center" class="Style1"><input type="submit" name="Submit" value="Envoyer" /></td>
                            </tr>
                          </table>
                </form>
              


              Le fichier log.php, appelé lors de la validation se compose de la maniere suivante :
              <?php 
              		require("connections/db.php");
              		require("utils/fonctions.php");
              		mysql_select_db($database_db, $db);
              		$log = sprintf("SELECT * FROM modx_web_users WHERE username = %s AND password = %s",
              				GetSQLValueString($_REQUEST['username'], "text"),
              				GetSQLValueString(md5($_REQUEST['password']), "text"));
              		$logok = mysql_query($log, $db) or die(mysql_error());
              		$row_log = mysql_fetch_assoc($logok);
              		$totalRows_log = mysql_num_rows($logok);	
              		
              		if ($totalRows_log != 0) {
              		$id_user=$row_log['id'];
              		
              		setcookie ('login',$id_user);
              		
              $groupe = "SELECT * FROM modx_web_groups WHERE webuser='".$id_user."'";
              $groupeok = mysql_query($groupe, $db) or die(mysql_error());
              $row_groupe = mysql_fetch_assoc($groupeok);
              
              setcookie ('groupe',$row_groupe['webgroup']);
              ?>
              <meta http-equiv="refresh" content="0;URL=test_log.php" />
              <?}else {?>
              <meta http-equiv="refresh" content="0;URL=index.php?id=4" />
              <?}?>
              


              Et le fichier test_log.php, appelé que si le login et le mot de passe sont correcte :

              <?php
              require("connections/db.php");
              		require("utils/fonctions.php");
              		mysql_select_db($database_db, $db);
              $_REQUEST['id']='185';		
              if (isset($_COOKIE['login'])) {
              
              $doc ="SELECT * FROM `modx_document_groups` WHERE document='".$_REQUEST['id']."'";
              $docok = mysql_query($doc, $db) or die(mysql_error());
              $row_doc_group = mysql_fetch_assoc($docok);
              
              if($row_doc_group['document_group']==$_COOKIE['groupe']){
              ?>
              YES PAPA TA REUSSIT !
              <?php
              }else{
              ?>
              Désolé, cette page n'est pas accessible pour vous.
              <?}
              }else{?>
              <meta http-equiv="refresh" content="0;URL=index.php?id=4" />
              <?}
              ?>
              


              Je simmule un id à 185 pour qu’il a verfier dans la base de donnée, comme si j’avai index.php?id=185. J’obtient alors à l’écran : YES PAPA TA REUSSIT !

              Lorsque je veux le passer sur modx, je fait 2 snippets :

              [!log_ok!]
              <?php
              require("connections/db.php");
              		require("utils/fonctions.php");
              		mysql_select_db($database_db, $db);
              	
              if (isset($_COOKIE['login'])) {
              
              $doc ="SELECT * FROM `modx_document_groups` WHERE document='".$_REQUEST['id']."'";
              $docok = mysql_query($doc, $db) or die(mysql_error());
              $row_doc_group = mysql_fetch_assoc($docok);
              
              if($row_doc_group['document_group']==$_COOKIE['groupe']){
              ?>
              


              et [!log_ok_fin!]
              <?php
              }else{
              ?>
              Désolé, cette page n'est pas accessible pour vous.
              <?}
              }else{?>
              <meta http-equiv="refresh" content="0;URL=index.php?id=4" />
              <?}
              ?>
              


              Dans mon template j’ai mis [!logo_ok!][*col_c*][!log_ok_fin!] où [*col_c*] est un TV pour le contenu de la page.
              Sur modx ça ne fonctionne pas, il me renvoie toujours vers la page par défaut, comme si il n’arrivait pas a identifier que l’utilisateur fait partit du bon groupe...

              Je ne sais pas si j’ai été assez clair :s mais si quelqu’un pouvait m’eclairer, merci beaucoup !
                • 6574
                • 22 Posts
                jme permet de faire un up ?
                  • 11975
                  • 2,542 Posts
                  Salut,

                  bizarre que tu n’aies pas une erreur PHP avec ton code scindé en plein test conditionnel.
                  Tu devrais regarder du côté des snippets existant et leur usage des événements qui jalonnnent l’éxécution de MODx via les plugins.

                  :-)

                    Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                    • 6574
                    • 22 Posts
                    Ben les tests sont correctes à mon humble avis.

                    Bon j’ai vu le fichier document.parser.class.inc.php du dossier manager/includes et je penses qu’il vaut mieux que je me penche sur weblogin, parce qu’il y a beaucoup de variables passées en $_SESSION.

                    Merci