Okt/10

23

Joomla 1.5 ACL Plugin

Kürzlich bin ich bei einem meiner Joomla Webprojekte (http://munich-spatzen.de) auf das Problem gestoßen, mehreren Nutzern einzelne Bereiche der Seite vorzuenthalten.

Leider bietet Joomla von Haus nur wenige Benutzergruppen (Registriert, Autor, Editor…) und dazu nur drei (Öffentlich, Registriert, Spezial) sog. Access Levels, welche den eigentlichen Zugriff auf Inhalte wie Kategorien, Module, Plugins und Beiträge steuern.

Kurzum hab ich mich auf die Suche nach einem Plugin / Komponente gemacht, die diese Lösung bis zum Erscheinen von Joomla 1.6 nachreicht. Das ist jedoch nicht so einfach gewesen, weil dort viele kostenpflichtige und unzulängliche Lösungen existieren.

Sehr vielversprechend ist die Komponente JxContentControl sowie ArtofUser, jedoch wie mir scheint, lösen die das Problem auch nicht vollständig. Die Komponente ArtofUser ermöglicht zumindest das Erstellen von neuen Benutzergruppen und erweist sich sehr hilfreich beim Kategorisieren und Einteilen von Nutzern. Manipulation der Access Levels sucht man hier jedoch vergebens.

Kurzum hab ich mich ein bißchen mit dem Joomla ACL System auseinander gesetzt („Weiterlesen“ Button klicken).

Zunächst erstellen wir die Benutzergruppe mithilfe der Komponente ArtofUser (alternativ manuell):

Wichtig ist hierbei der Name der Gruppe, wir nennen sie: NeuesAccessLevel. Den Grund sehen wir später. Prinzipiell ist der Name egal, wichtig ist nur das Benutzergruppenname und der Access Level Name gleich lauten.

Herzstück für Joomlas Access Steuerung ist die Datei „plugins\user\joomla.php“ :

JOOMLA.PHP ->onLoginUser()
[...]

//Mark the user as logged in
 $instance->set( 'guest', 0);
 $instance->set('aid', 1);

 // Fudge Authors, Editors, Publishers and
 Super Administrators into the special access group
 if ($acl->is_group_child_of($grp->name, 'Registered') ||
  $acl->is_group_child_of($grp->name, 'Public Backend'))
 {
 $instance->set('aid', 2);
 }

In der „joomla.php“ wird nach dem Einloggen, das Access level festgesetzt. Wie man sieht kennt Joomla hier nur die oben genannten 3 Gruppen. Daher hab ich ein kleines Plugin geschrieben, was die Joomla User Abfrage ein wenig ergänzt (manuell kann man es auch einfach unter die obigen Zeilen setzen):

 $db =& JFactory::getDBO();
 $query = "SELECT id FROM ".$db->nameQuote('#__groups')."
WHERE ".$db->nameQuote('name')." = ".$db->quote($grp->name).";";
 $db->setQuery($query);
 $count = $db->loadResult();

 if(isset($count))
 {
 if($count>2)
 {
 $instance->set('aid', $count);
 }
 }

D.h. existiert in der Tabelle „jos_groups“ ein Access Level mit dem gleichen Namen wie der zugehörige Gruppenname des Benutzers, so wird die jeweilige (Access) ID aus der Tabelle gesetzt. Also erstellen wir das dazugehörige Access Level in der mysql Tabelle (manuell z.B. mit phpmyadmin):

Nun hat der Nutzer die in der Tabelle spezifizierte Access ID erhalten.

Was jetzt noch fehlt ist schlichtweg einzelnen Beiträgen, Modulen oder ähnlichem das neue hinzugefügte Access Level beizubringen. Dazu bedarfs es der Änderung der Datei „administrator/components/com_content/models/article.xml“.

<param name="access" type="list" size="20" default="0"
label="Access Level" description="DETAILACCESS">
 <option value="0">Public</option>
 <option value="1">Registered</option>
 <option value="2">Special</option>
 <option value="3">NeuesAccessLevel</option>
 </param>
[...]

Wenn man alles richtig gemacht hat kann man nun im Backend Beiträgen, Modulen etc. das neue Access Level zuweisen.

Wichtig nochmal zu erwähnen ist, dass dieses Plugin nur funktioniert wenn Access Level und Benutzergruppenname gleich sind. Zum testen loggt ihr euch nun bequem im Frontend ein. Sobald ihr Änderungen am Benutzer ACL System vornehmt, solltet ihr euch im Frontend zunächst ausloggen.

Download des Plugins mit der modifizierten joomla.php hier: user_extended_plugin

Achtung: Das Joomla eigene User Plugin (Typ: user Bezeichnung: Benutzer Joomla) muss danach deaktiviert und das neue (User – Joomla! Access level extension) Plugin aktiviert werden!

Viel Spaß!

· · · · · · · ·

No comments yet.

Leave a Reply

*

<<

>>

Theme Design by devolux.nh2.me