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.
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.
- // Festlegen des Attributs in rex_com_user_field fuer den Login-Startartikel
- if(!$login_article_value) $login_article_value = 'loginarticle';
Der nächste Codeabschnitt schließlich setzt den Aufruf der individuellen Benutzer-Login-Seiten um:
- // Individuellen Login-Artikel oder Start-Artikel aufrufen
- if($REX['COM_USER']->getValue($login_article_value))
- {
- $jump_aid = $REX['COM_USER']->getValue($login_article_value);
- }
- else
- {
- $jump_aid = $REX['START_ARTICLE_ID'];
- }
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:
- /*
- Fuer die Verwendung in Navigationen und Templates
- 0 Standard Zugriff fuer alle
- -1 Zugriff fuer nicht eingeloggte User
- 1 Zugriff fuer eingeloggte User
- 2 Zugriff fuer eingeloggte Admins
- */
- function rex_com_checkUserPerm($type)
- {
- global $REX;
- if ($type == "") return true; // Zugriff fuer alle
- if ($type == "0") return true; // Zugriff fuer alle
- {
- if($REX['ARTICLE']->getValue('art_com_user'))
- {
- // Eigene Bereiche fuer angemeldete Community-User einrichten
- // Dazu wird die MetaInfo art_com_user bei den Artikeln genutzt, Admins sehen alles
- if(($type == '1' && $REX['COM_USER']->getValue('id')== $REX['ARTICLE']->getValue('art_com_user')) || $REX['COM_USER']->getValue("admin")==1) return true;
- // Artikel mit art_com_user = -1 kann jeder angemeldete User lesen
- elseif($type == '1' && $REX['ARTICLE']->getValue('art_com_user')=='-1') return true;
- }
- else
- {
- // oder die Standardvariante
- if ($type == "1") return true; // Zugriff fuer eingeloggte User
- }
- if ($type == "2" && $REX['COM_USER']->getValue("admin")==1) return true;
- }
- {
- if ($type == "-1") return true; // Zugriff fuer nicht eingeloggte User
- }
- return false;
- }
- ?>
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:
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.
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.