Community Authentifizierung

Bei dem Template handelt sich um eine modifizierte Version des Authentifizierungs-Template aus der Basisversion des Community-Addon. Nachfolgend gehe ich nur auf die Anpassungen im Quellcode ein.

Zunächst wird der Spaltenname für die Tabelle com_user festgelegt. In diesem zusätzlichen Feld der Community-User-Einstellungen kann die Artikel-ID eines individuellen Startartikels angegeben werden. Dieser Artikel wird aufgerufen, wenn sich der Community-User erfolgreich angemeldet hat.

loginarticle

Grundsätzlich wird dieser Wert im YAML-Layout Seitentemplate übergeben. Das Authentifizierungstemplate kann jedoch auch mit dem YAML-Navigationstemplate und dem yaml_com_login-Template eingesetzt werden, ohne die restlichen YAML-Templates zu verwenden.

  1. // Festlegen des Attributs in rex_com_user_field fuer den Login-Startartikel
  2. if(!$login_article_value) $login_article_value = 'loginarticle';

Der nächste Codeabschnitt schließlich setzt den Aufruf der individuellen Benutzer-Login-Seiten um:

  1.       // Individuellen Login-Artikel oder Start-Artikel aufrufen
  2.       if($REX['COM_USER']->getValue($login_article_value))
  3.       {
  4.         $jump_aid = $REX['COM_USER']->getValue($login_article_value);
  5.       }
  6.       else
  7.       {
  8.         $jump_aid = $REX['START_ARTICLE_ID'];
  9.       }

Die Variable jump_aid enthält die Artikel-ID des redaxo-Artikels, der nach der Anmeldung aufgerufen werden soll.

Etwas umfangreicher fielen die Anpassungen in der Funktion rex_com_checkUserPerm aus:

  1. /*
  2.   Fuer die Verwendung in Navigationen und Templates
  3.      0  Standard    Zugriff fuer alle
  4.     -1  Zugriff fuer nicht eingeloggte User  
  5.      1  Zugriff fuer eingeloggte User  
  6.      2  Zugriff fuer eingeloggte Admins
  7. */
  8. function rex_com_checkUserPerm($type)
  9. {
  10.   global $REX;
  11.   if ($type == "") return true; // Zugriff fuer alle
  12.   if ($type == "0") return true; // Zugriff fuer alle
  13.  
  14.   if (isset($REX['COM_USER']) && is_object($REX['COM_USER']))
  15.   {
  16.     if($REX['ARTICLE']->getValue('art_com_user'))
  17.     {
  18.       // Eigene Bereiche fuer angemeldete Community-User einrichten
  19.       // Dazu wird die MetaInfo art_com_user bei den Artikeln genutzt, Admins sehen alles
  20.       if(($type == '1' && $REX['COM_USER']->getValue('id')== $REX['ARTICLE']->getValue('art_com_user')) || $REX['COM_USER']->getValue("admin")==1) return true;
  21.       // Artikel mit art_com_user = -1 kann jeder angemeldete User lesen
  22.       elseif($type == '1' && $REX['ARTICLE']->getValue('art_com_user')=='-1') return true;
  23.     }
  24.     else
  25.     {
  26.       // oder die Standardvariante
  27.       if ($type == "1") return true; // Zugriff fuer eingeloggte User
  28.     }
  29.     if ($type == "2" && $REX['COM_USER']->getValue("admin")==1) return true;
  30.   }
  31.   if(!isset($REX['COM_USER']) || !is_object($REX['COM_USER']))
  32.   {
  33.     if ($type == "-1") return true; // Zugriff fuer nicht eingeloggte User
  34.   }
  35.   return false;
  36. }
  37. ?>

Neben den Vorgaben für die Verwendung in Navigationen und Templates, wurde die Funktion dahingehend erweitert, dass Admins grundsätzlich alle geschützten Bereiche sehen.

Zusätzlich wird es über die MetaInfo art_com_user möglich, für jeden angemeldeten Community-User einen individuellen Bereich einzurichten, den nur er betreten kann. Die Zuordnung erfolgt über die Community-User-Id, die mit dem Eintrag in art_com_user übereinstimmen muss.

Dazu wird die MetaInfo art_com_user wie folgt eingerichtet:

art_com_user

Durch die UNION SELECT Anweisung im Parameter-Feld der MetaInfo wird neben den Community-Usern, die den Staus 1 (Aktiv) haben, auch der Wert -1 (Angemeldet) in das Selectfeld übertragen. Dadurch können entsprechend gekennzeichnete Artikel von allen angemeldeten Usern gelesen werden.

Kommt die MetaInfo art_com_user zum Einsatz, muss der Artikel-Typ der zu schützenden Artikel zusätzlich zur Userangabe auf “eingeloggt” gesetzt werden.

art_com_user2

Benötigt man keine individuellen Benutzerereiche, so lässt man die MetaInfo art_com_user einfach weg oder löscht eine bereits vorhandene aus den MetaInfos. Dadurch bleibt die Standardfunktionalität des Community-Addons erhalten.