Benutzerabhängige Menüpnkte ausblenden, wenn keine Berechtig

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

Benutzerabhängige Menüpnkte ausblenden, wenn keine Berechtig

Beitragvon benny » 25. Jan 2009, 12:59

[Frage Verschoben von hier]

Ich hab Redaxo 4.1.0 mit Simple User Addon Version 1.1

Mein Navigationstemplate ist ein bisschen abgewandeltes 3 Ebenen / Liste nur mit a-Tags von Thomas Blum.

Ich hab nun versucht in dieses Navigationstemplate einzubauen, dass geprüft wird, ob ein Menüpunkt für den angemeldeten Nutzer überhaupt erreichbar ist oder nicht.

Hier mal das abgewandelte Nav-Template ohne irgendwelche Rechte-Modifikationen:
Code: Alles auswählen
<?php
$path = explode( '|', $this->getValue("path").$this->getValue("article_id"));

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];

$level1_navigation = "";
$level2_navigation = "";
$level3_navigation = "";

foreach (OOCategory::getRootCategories() as $lev1):
   if($lev1->isOnline()):
      $level1_navigation .= '<a class="menu"  href="'.$lev1->getUrl().'">[&nbsp;'.$lev1->getName().'&nbsp;]</a>'."\n"; // momentan außer Funktion
      if ($lev1->getId() == $path1) :
         $lev1Size = sizeof($lev1->getChildren());

         if($lev1Size != "0"):
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline()):
                  $level2_navigation .= '<a class="submenu" href="'.$lev2->getUrl().'">[&nbsp;'.$lev2->getName().'&nbsp;]</a> '."\n";
               endif;
               // ANFANG  EBENE 3
               $lev2Size = sizeof($lev2->getChildren());
               if($lev2Size != "0" && in_array($lev2->getId(), $path)):
                  foreach ($lev2->getChildren() as $lev3):
                     if ($lev3->isOnline()):
                        $level3_navigation .= '<a class="submenu" href="'.$lev3->getUrl().'">[&nbsp;'.$lev3->getName().'&nbsp;]</a><br />'."\n";
                     endif;
                  endforeach;
               endif;
               // ENDE EBENE 3
            endforeach;
         endif;
      endif;
   endif;
endforeach;
?>


Und hier mein Versuch Gruppenrechte zu berücksichtigen:
Code: Alles auswählen
<?php
$path = explode( '|', $this->getValue("path").$this->getValue("article_id"));

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];

$level1_navigation = "";
$level2_navigation = "";
$level3_navigation = "";

if (!function_exists('zugriffGruppeOk')){
  function zugriffGruppeOk($nav){
    // Zugriffsberechtigungen fuer Simple User 1.1 pruefen
   if(OOAddon::isAvailable('simple_user'))
   {
      // auf User-Gruppen pruefen
      $arrArticleGroupId = explode("|",$nav->getValue("art_type_group_id"));

      if($arrArticleGroupId[1]!="")
      {
         $arrUserGroupId = explode("|+|",$_SESSION['USR_GROUP']);
         if($_SESSION['USR_GROUP'] != "")
         {
            $chkSimpleUsrGrp = false;

            foreach($arrUserGroupId as $usrGroupId)
            {
               if(in_array($usrGroupId,$arrArticleGroupId))
               {
                  $chkSimpleUsrGrp = true;
               }
            }
         }
      }
      else
      {
         $chkSimpleUsrGrp = true;
      }
   }
   else
   {
      $chkSimpleUsrGrp = true;
   }

    return $chkSimpleUsrGrp;
  }
}

foreach (OOCategory::getRootCategories() as $lev1):
   if($lev1->isOnline() && zugriffGruppeOk($lev1)):
      $level1_navigation .= '<a class="menu"  href="'.$lev1->getUrl().'">[&nbsp;'.$lev1->getName().'&nbsp;]</a>'."\n"; // momentan außer Funktion
      if ($lev1->getId() == $path1) :
         $lev1Size = sizeof($lev1->getChildren());

         if($lev1Size != "0"):
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline() && zugriffGruppeOk($lev2)):
                  $level2_navigation .= '<a class="submenu" href="'.$lev2->getUrl().'">[&nbsp;'.$lev2->getName().'&nbsp;]</a> '."\n";
               endif;
               // ANFANG  EBENE 3
               $lev2Size = sizeof($lev2->getChildren());
               if($lev2Size != "0" && in_array($lev2->getId(), $path)):
                  foreach ($lev2->getChildren() as $lev3):
                     if ($lev3->isOnline() && zugriffGruppeOk($lev3)):
                        $level3_navigation .= '<a class="submenu" href="'.$lev3->getUrl().'">[&nbsp;'.$lev3->getName().'&nbsp;]</a><br />'."\n";
                     endif;
                  endforeach;
               endif;
               // ENDE EBENE 3
            endforeach;
         endif;
      endif;
   endif;
endforeach;
?>


Das funktioniert nur leider nicht so wie ich das eigentlich haben will...
Es richtet sich so nur nach dem Rootartikel: ist der Zugriff darauf berechtigt, wird der Menüpunkt angezeigt. Ist er es nicht, werden auch alle unterliegenden Berechtigungen angezeigt - das heißt es ist momentan total Egal, wie die Berechtigung für den Artikel selbst gesetzt ist.

Für meinen Versuch hab ich mir die Universelle <ul>Navigation (YAML) von raybeam zu hilfe genommen

Kann mir jemand sagen, was ich ändern muss, damit das klappt? (Damit nur die Menüpunkte angezeigt werden, auf die man gerade auch die Berechtigung hat?)
mfg Benny
benny
 
Beiträge: 171
Registriert: 29. Mai 2007, 08:57
Wohnort: Fulda

Beitragvon Joachim.Dörr » 25. Jan 2009, 20:49

Hi, schau dir bitte mal die authentifizierung an, dort solltest du alles haben, was du zum vergleich der gruppenfreigabe und der zugewiesenen usergruppen brauchst damit der navpunkt nur ausgegeben wird, wenn der user entsprechende freigabe besitzt.

lg
Joachim
Joachim.Dörr
 
Beiträge: 1253
Registriert: 7. Apr 2006, 00:49

Beitragvon benny » 25. Jan 2009, 22:06

Ich glaube, mein Problem liegt weniger in den Rechten selbst, sondern mehr darin, dass ich nen Denkfehler bzgl. dem Auswerten der Navigation hab.

Denn das Rechte vergleichen selbst scheint ja zu klappen. Was nicht klappt, ist das auswerten bei den richtigen Menüpunkten. Momentan hab ich es halt nur, dass die Root Kategorie getsetet wird. Und ich will einfach nicht auf die richtige Lösung kommen... Ich hab da nen grundsätzlichen Fehler in meinem Denkprozess sozusagen - aber ich finde ihn nicht :-(
mfg Benny
benny
 
Beiträge: 171
Registriert: 29. Mai 2007, 08:57
Wohnort: Fulda

Beitragvon Joachim.Dörr » 26. Jan 2009, 10:23

Versuch mal in den Stil Deine Navigation zusammen zubauen. Wie gesagt Du hast alles im Authentifizierungstemplate:


Code: Alles auswählen
      if ($lev1->getId() == $path1) {

         $grid = $lev1->getValue('art_type_group_id');
         if ($grid=='||') $grid = false;
         $art_array_groupId = explode("|",$lev1->getValue("art_type_group_id")."|");
         if($User['group'] != "") {
            $tw=sizeof($art_array_groupId);
            $us_group_ok = "";
            for ($i=0;$i < sizeof($art_array_groupId); $i++){
               for ($j=0;$j < sizeof($USR_array_groupId); $j++){     // arr_content wurde der Funktion uebergeben

                  if($USR_array_groupId[$j] == $art_array_groupId[$i])
                     $us_group_ok = "yap";
               }
            }
         }
         if(!$grid or $us_group_ok != "") $nav .= '<li><span class="current"><a class="current" href="'.rex_getUrl($lev1->getId()).'">'.$lev1->getName().'</a></span>';

      }


lg
Joachim
Joachim.Dörr
 
Beiträge: 1253
Registriert: 7. Apr 2006, 00:49


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast