Geschützter Bereich: nur erster Unterordner erreichbar

Gesperrt
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Geschützter Bereich: nur erster Unterordner erreichbar

Beitrag von sherman » Mi 19. Jan 2011, 03:17

Hallo Forum:

Ich habe 3 frontenduser und 3 frontenduser-Gruppen:
user1 -> group1
user2 -> group2
user3 -> group3

Kategorie:
1 Ebene: Kunden
2 Ebene: group1, group2 und group3

Alle Kateogrien sind geschützt. group1 hat Zugriffsrecht auf Kategorie "Kunden" und "group1". Group2 und group3 respektive...

Die 3 Gruppen haben Zugriffsrecht auf ihren jeweiligen geschützten Order (group1, group2, group3) im Hauptbaum der Seite.

Wenn sich user1 einloggt, dann wird er korrekterweise uaf die idcat und idart, die im Modul login_form angegeben sind, weitergeleitet. Innerhalb dieser Kategorie sieht er seine Unterkategorie group1.
User2 loggt sich ein, wird weitergeleitet auf dieselbe Kategorie, jedoch zeigt die Navigation seinen Unterordner nicht an.
Ändere ich die Reihenfolge der Unterordner, d.h. setzte den Order "group2" an erster Stelle und "group1" an zweiter, dann klappt der Login für user2, aber nicht mehr für user1!

Ich habe folgende Module im Einsatz:
- Navigation aus dem Beispielmandanten für die erste Navigationsebene
- Kummer Navigation Universell für die zweite Navigationsebene
- Login Modul aus dem Beispielmandanten

Contenido Version ist 4.8.13
AMR ist installiert aber nicht aktiviert!

Ich hoffe ihr versteht mein Problem, und jmd. kann mir weiterhelfen.

Danke.

idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: Geschützter Bereich: nur erster Unterordner erreichbar

Beitrag von idea-tec » Mi 19. Jan 2011, 07:19

Dein Problem steckt in der atelierq.navigation.inc.class.php aus der Navigation Universell

Code: Alles auswählen

		"IF (b.visible = 1 && (b.public = 1 || d.idfrontenduser IS NOT NULL), 1, 0) AS visible " .
Müsste so in etwa in Zeile 86 sein.

ich habe mir das irgendwann einmal einfach so geändert:

Code: Alles auswählen

		"visible " .
nie zu Ende getestet, tut aber seinen Dienst
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)

sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Re: Geschützter Bereich: nur erster Unterordner erreichbar

Beitrag von sherman » Mi 19. Jan 2011, 22:55

Vielen Dank für die schnelle Antwort!!!
Ich habe nach dem Befehl gesucht und ihn nicht in meiner atelierq.class.inc.php gefunden. Da wurde ich stutzig und habe nach einer anderen version gesucht:

Code: Alles auswählen

<?php


/**
* navigationUniversell (aQnavigation)
* @version $Id: atelierq.navigation.class.inc.php 9572 2009-03-02 17:47:08Z akm $
* @author Andreas Kummer, w3concepts AG
* @copyright Copyright &copy; 2009, w3concepts AG
*/

class aQnavigation {

   /**
    * Konstruktor der Klasse.
    * @param Integer  Primärschlüssel der Startkategorie.
    */
   function aQnavigation($startId) {

      global $client, $lang, $idcat, $db;

      $this->startId = $startId;

      $this->client = $client;
      $this->lang = $lang;

      $this->idcat = (isset ($_GET['pretend'])) ? ($_GET['pretend']) : ($idcat);

      $this->before = '';
      $this->beforeEach = '';
      $this->between = '';
      $this->after = '';

      $this->excludeItemsStartingWith = '__';

      $this->db = $db;

      $this->setStartIds();

      $this->getNavigation();
   }

   /**
    * Auslesen der Navigationsstruktur aus der Datenbank.
    */
   function getNavigation() {

      global $cfg, $auth;

      if ($this->startId != $this->id[0]) {
         /*
          * Wenn die StartId nicht identisch ist mit der höchsten Ebene der
          * aktuell selektierten Kategorie, dann liegt die gewählte Kategorie
          * folgerichtig ausserhalb des für die Navigation gewählten Baumes.
          * In diesem Fall ist nur die Hauptnavigation einzublenden.
          */
         $this->id[0] = $this->startId;
         for ($i = 1; $i <= 4; $i++) {
            $this->id[$i] = -1;
         }
      }

      if ($auth->auth['uid'] == '' || !$this->isNumeric($auth->auth['uid'])) {
         /*
          * Login nicht erfolgt
          */
         $user = 0;
      } else {
         /*
          * Benutzer ist eingeloggt
          */
         $user = $auth->auth['uid'];
      }

      $this->db->query("" .
      "SELECT DISTINCT " .
      "a.idcat, " .
      "a.parentid, " .
      "a.preid, " .
      "a.postid, " .
      "a.parentid, " .
      "b.name, " .
      "b.idlang, " .
      "IF (b.visible = 1 && (b.public = 1 || d.idfrontenduser IS NOT NULL), 1, 0) AS visible " .
      "FROM {$cfg['tab']['cat']} AS a " .
      "LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " .
      "LEFT JOIN {$cfg['tab']['frontendpermissions']} AS c ON ((c.item = b.idcatlang OR c.item = '__GLOBAL__') AND c.idlang = b.idlang AND plugin ='category') " .
      "LEFT JOIN {$cfg['tab']['frontendgroupmembers']} AS d ON c.idfrontendgroup = d.idfrontendgroup AND d.idfrontenduser = {$user} " .
      "WHERE " .
      "   a.idclient = {$this->client} " .
      "   AND (" .
      "      a.parentid = {$this->id[0]} " .
      "      OR a.parentid = {$this->id[1]} " .
      "      OR a.parentid = {$this->id[2]} " .
      "      OR a.parentid = {$this->id[3]} " .
      "      OR a.parentid = {$this->id[4]} " .
      "   ) " .
      "");

      $this->navigationTree = array ();

      $this->firstId[0] = 0;
      $this->firstId[1] = 0;
      $this->firstId[2] = 0;
      $this->firstId[3] = 0;
      $this->firstId[4] = 0;

      while ($this->db->next_record()) {

         for ($i = 0; $i <= 4; $i++) {
            if (($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == $this->lang) || ($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == null)) {
               $this->firstId[$i] = $this->db->f('idcat');
            }
         }
         /*
          * Das Einfügen in den Navigationsbaum darf nur erfolgen, wenn noch kein Eintrag existiert
          * oder - wenn bereits einer existiert - der neue Eintrag der aktuell gewählten Sprache
          * entspricht.
          */
         if (!isset ($this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')]) || $this->db->f('idlang') == $this->lang) {
            $this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')] = array (
               'preid' => $this->db->f('preid'
            ), 'postid' => $this->db->f('postid'), 'visible' => $this->db->f('visible'), 'name' => $this->db->f('name'), 'idlang' => $this->db->f('idlang'));
         }
      }

   }

   /**
    * Ausgabe der Navigation an die Standardausgabe.
    * @param String  Navigationstyp
    */
   function showNavigation($type, $next = -1) {

      static $first;
      static $output = array (
         false,
         false,
         false,
         false,
         false,
         false,
         false
      );
      
      $returnValue = "";

      if ($next == 0) {
         if ($output[$type]) {
            return '#END#' . $this->after[$type];
         } else {
            return false;
         }
      }

      if ($next == -1) {
         $returnValue .= $this->before[$type] . '#START#';
         $next = $this->firstId[$type];
         $first[$type] = true;
      }

      $parentId = $this->id[$type];
      
      $link = 'front_content.php?idcat=' . $next;

      if ($this->navigationTree[$parentId][$next]['visible'] == 1 && $this->navigationTree[$parentId][$next]['idlang'] == $this->lang && $this->isVisble($this->navigationTree[$parentId][$next]['name'])) {
         if (!$first[$type]) {
            $returnValue .= $this->between[$type];
         }

         if (strstr($this->navigationTree[$parentId][$next]['name'], '$$$') == true) {
            $name = explode('$$$', $this->navigationTree[$parentId][$next]['name']);
            $name1 = $name[0];
            $name2 = $name[1];
         } else {
            $name1 = $this->navigationTree[$parentId][$next]['name'];
            $name2 = '';
         }

         $sub = (isset ($this->sub[$type])) ? ($this->sub[$type]) : ('');

         if ($this->isActive($next) & !empty ($this->maskActive[$type]) & !empty ($this->maskActive[$type])) {
            $returnValue .= $this->beforeSelected[$type];
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskActive[$type]) : ($this->maskActiveSub[$type])))));
         }
         elseif ($this->isSelected($next)) {
            $returnValue .= $this->beforeSelected[$type];
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskSelected[$type]) : ($this->maskSelectedSub[$type])))));
         } else {
            $returnValue .= $this->beforeEach[$type];
            $returnValue .= str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, $this->maskNormal[$type]))));
         }

         $first[$type] = false;
         $output[$type] = true;
                  
      }
      elseif (!$output && $this->navigationTree[$parentId][$next]['postid'] == 0) {
         /*
          * Die Navigation enthält nichts.
          */
      }
      
      $returnValue = $returnValue . $this->showNavigation($type, $this->navigationTree[$parentId][$next]['postid']);

      $returnValue = preg_replace('/#START#(.*?)\\{iffirst:(.*?)\\}/', "$1$2", $returnValue);
      $returnValue = preg_replace('/\\{iffirst:(.*?)\\}/', "", $returnValue);
      
      $returnValue = preg_replace('/\\{iflast:(.*?)\\}(.*?)#END#/', "$1$2", $returnValue);
      $returnValue = preg_replace('/\\{iflast:(.*?)\\}/', "", $returnValue);
      
      $returnValue = preg_replace('/#START#/', "", $returnValue);

      return $returnValue;
   }

   function setExcludeStart($start) {
      $this->excludeItemsStartingWith = $start;
   }

   function isVisble($name) {
      if (substr($name, 0, strlen($this->excludeItemsStartingWith)) == $this->excludeItemsStartingWith) {
         return false;
      }
      return true;
   }

   /**
    * Ausgabe vor der Navigation
    * @param String  Ausgabe vor der Navigation.
    */
   function before($level, $text) {
      $this->before[$level] = $text;
   }

   /**
    * Ausgabe vor jedem Eintrag
    * @param String  Ausgabe vor jedem Eintrag.
    */
   function beforeEach($level, $text) {
      $this->beforeEach[$level] = $text;
   }

   /**
    * Ausgabe vor jedem selektierten Menueintrag
    * @param String  Ausgabe vor jedem selektierten Menueintrag.
    */
   function beforeSelected($level, $text) {
      $this->beforeSelected[$level] = $text;
   }

   /**
    * Ausgabe zwischen zwei Hauptmenupunkten
    * @param String  Ausgabe zwischen zwei Hauptmenupunkten.
    */
   function between($level, $text) {
      $this->between[$level] = $text;
   }

   /**
    * Ausgabe nach der Navigation
    * @param String  Ausgabe nach der Navigation.
    */
   function after($level, $text) {
      $this->after[$level] = $text;
   }

   function maskNormal($level, $text) {
      $this->maskNormal[$level] = $text;
   }

   function maskNormalSub($level, $text) {
      $this->maskNormalSub[$level] = $text;
   }

   function maskSelected($level, $text) {
      $this->maskSelected[$level] = $text;
   }

   function maskSelectedSub($level, $text) {
      $this->maskSelectedSub[$level] = $text;
   }

   function maskActive($level, $text) {
      $this->maskActive[$level] = $text;
   }

   function maskActiveSub($level, $text) {
      $this->maskActiveSub[$level] = $text;
   }

   function setSub($level, $content) {
      $this->sub[$level] = $content;
   }

   /**
    * Gibt das Level der Kategorie zurück.
    * @param Integer  Primärschlüssel der Kategorie.
    * @return Integer Level der spezifizierten Kategorie.
    */
   function getLevel($idcat) {

      global $cfg;

      if (empty ($idcat)) {
         return 0;
      }

      $this->db->query("" .
      "SELECT level FROM {$cfg['tab']['cat_tree']} " .
      "WHERE " .
      "   idcat = $idcat" .
      "");
      if ($this->db->next_record()) {
         return $this->db->f('level');
      } else {
         return 0;
      }
   }

   /**
    * Gib die Tiefe relativ zum Hauptmenu an.
    * @param Integer  Primärschlüssel der Kategorie
    * @return Integer Level relativ zum Hauptmenu
    */
   function getNetLevel($idcat) {

      return $this->getLevel($idcat) - $this->getLevel($this->startId);
   }

   /**
    * Ermittlung des jeweils ersten Kategorieeintrages jeder Ebene. Die
    * Speicherung dieser Daten erfolgt in das Klassenattribut id.
    */
   function setStartIds() {

      $id = $this->idcat;

      $level = $this->getNetLevel($id);
      $this->id[$level] = $id;

      while ($level > 0) {
         $this->id[$level -1] = $this->getParentId($id);
         $id = $this->id[$level -1];
         $level = $this->getNetLevel($id);
      }

      if (empty ($this->id)) {
         $this->id[0] = $this->startId;
      }
      for ($i = 1; $i <= 4; $i++) {
         if (empty ($this->id[$i])) {
            $this->id[$i] = -1;
         }
      }
      ksort($this->id);
   }

   /**
    * Ermittlung des Elternelementes der Kategorie mit dem Primärschlüssel
    * idcat
    * @param Integer  Primärschlüssel des Kindelementes, dessen Elternelement
    * ermittelt werden soll.
    * @return Integer Primärschlüssel des Elternelementes.
    */
   function getParentId($idcat) {

      global $cfg;

      $this->db->query("" .
      "SELECT parentid FROM {$cfg['tab']['cat']} " .
      "WHERE " .
      "   idcat = $idcat " .
      "");
      if ($this->db->next_record()) {
         return $this->db->f('parentid');
      } else {
         return 0;
      }
   }

   /**
    * Anzeige, ob eine Navigationsebene Elemente enthält oder nicht.
    * @param Integer  Navigationsstufe.
    * @return Boolean True, wenn die Navigationsstufe leer ist (keine Elemente
    * enhält). Sonst false.
    */
   function navigationEmpty($level) {

      if ($this->firstId[$level] == 0) {
         return true;
      }

      return false;
   }

   /**
    * Anzeige, ob eine Kategorie selektiert ist oder nicht. Eine Kategorie gilt
    * als selektiert, wenn sie die aktuelle Kategorie ist oder ein direktes
    * oder indirektes Elternelement der aktuellen Kategorie.
    * @param Integer  Primärschlüssel der Kategorie, deren Status gefragt ist.
    * @return Boolean True, wenn die gefragte Kategorie mit der aktuellen
    * Kategorie übereinstimmt oder ein direktes oder indirektes Elternelement
    * der aktuellen Kategorie darstellt.
    */
   function isSelected($idcat) {

      return in_array($idcat, $this->id);
   }

   /**
    * Anzeige, ob es sich bei der Kategorie um die aktive Kategorie handelt oder nicht.
    * @param Integer Primärschlüssel der Kategorie, deren Status gefragt ist.
    * @return Boolean True, wenn die gefragte Kategorie aktiv ist.
    */
   function isActive($idcat) {

      return $idcat == $GLOBALS['idcat'];
   }

   /**
    * Die Funktion gibt true zurück, wenn der übergene String ausschliesslich aus nummerischen Ziffern besteht.
    * @param String parameter String, der geprüft werden soll.
    * @return Boolean True, wenn der übergebene String ausschliesslich aus nummerischen Ziffern besteht.
    */
   function isNumeric($parameter) {
      return !preg_match("/[^0-9]/", $parameter);
   }
}
?>
Ist wahrscheinlich eine neuere Version als die, die ich benutzte. Mit dieser funktioniert das mit dem geschützten Bereich reibungslos.

Nochmals vielen Dank für Deinen Denkanstoss.

Gesperrt