TYPO3 bővítmény · Dokumentáció

Backend User Invite

Egy új backend-felhasználó felvétele általában azzal jár, hogy létrehozzuk a fiókot, kitalálunk egy jelszót, majd valahogyan eljuttatjuk azt az érintetthez — e-mailben, chaten vagy egy cetlin.

composer
composer require digitalzombies/be-invite

Extension key:be_invite · Composer:digitalzombies/be-invite · TYPO3: 14 LTS

Egy új backend-felhasználó felvétele általában azzal jár, hogy létrehozzuk a fiókot, kitalálunk egy jelszót, majd valahogyan eljuttatjuk azt az érintetthez — e-mailben, chaten vagy egy cetlin. A jelszó így olyan csatornába kerül, amelyet nem ti felügyeltek, és többnyire ott is marad.

Ez az extension mindezt meghívással váltja ki. A rendszergazda megad egy e-mail-címet és kiválasztja a felhasználói csoportokat; a meghívott kap egy linket, és maga választ jelszót. Így soha senki nem kezeli más ember jelszavát.


A meghívás folyamata

1. A rendszergazda megnyitja a Rendszer › Backend-felhasználók modult

A TYPO3 saját Szerkesztő létrehozása / Adminisztrátor létrehozása gombjai mellett megjelenik a Felhasználó meghívása gomb. Csak adminisztrátoroknak és csak a felhasználólistán jelenik meg.

A „Felhasználó meghívása" gomb a Backend-felhasználók modulban

2. A meghívott adatainak megadása

A párbeszédablak egy e-mail-címet, egy opcionális nevet és legalább egy backend felhasználói csoportot kér. A csoportok listája a megnyitáskor töltődik be a szerverről, így mindig a ténylegesen létező csoportokat mutatja.

A meghívási párbeszédablak üres űrlappal

Az e-mail-cím lesz az új felhasználó felhasználóneve — nincs külön felhasználónév, amit ki kellene találni és közölni.

A kitöltött meghívási párbeszédablak

3. A TYPO3 megerősítést kér a rendszergazdától

A backend-fiók létrehozása kiemelt jogosultságú művelet, ezért a TYPO3 sudo módja kéri a rendszergazdát, hogy adja meg újra a saját jelszavát. Egy őrizetlenül hagyott, még bejelentkezett munkamenettel így nem lehet senkinek backend-hozzáférést adni.

A TYPO3 sudo módjának jelszó-megerősítése

4. A meghívó kimegy

Visszajelzés arról, hogy a meghívó elment

A fiók ezzel létrejött, aktív, és megkapta a kiválasztott csoportokat — de nincs olyan jelszava, amelyet bárki ismerne, és még soha nem léptek be vele.

Az új fiók a backend-felhasználók listájában

5. A meghívott megkapja az e-mailt

Az e-mail tartalmazza a felhasználónevet és egy aktivációs linket, amely 48 órán át érvényes. HTML és egyszerű szöveges formában is elmegy.

A meghívó e-mail

6. A meghívott beállítja a saját jelszavát

A link a TYPO3 saját jelszó-visszaállító képernyőjét nyitja meg — nincs egyedi űrlap, nincs külön kódútvonal, és a webhely jelszóházirendje ugyanúgy érvényesül, mint bárhol máshol.

A TYPO3 jelszó-visszaállító képernyője a meghívó linkről megnyitva

A jelszó beállítása után a meghívott az e-mail-címével és az imént választott jelszavával tud belépni.


Mi történik a háttérben

LépésMit csinál az extension
ValidációLevágja a felesleges szóközöket, kisbetűssé alakítja az e-mail-címet, elutasítja a hibás címeket, az 50 karakternél hosszabbakat (ennyi a be_users.username szélessége) és a csoport nélküli kéréseket
Duplikátum-ellenőrzésElutasítja a meghívást, ha az e-mail vagy a felhasználónév már bármelyik fiókhoz tartozik — beleértve a letiltott és időkorlátos fiókokat is
Fiók létrehozásaA rekordot a TYPO3 DataHandler-én keresztül írja: hosszú, véletlenszerű helyőrző jelszóval, admin = 0 beállítással, aktív állapotban, gyökérszinten
Aktivációs linkPontosan úgy állít elő tokent, ahogyan a TYPO3 core a jelszó-visszaállító tokeneket, de 2 óra helyett 48 órás élettartammal, és hashelve tárolja
E-mailKirendereli az Invitation.html / Invitation.txt Fluid-sablonokat, és a beállított TYPO3-mailerrel küldi el

Ha a fiók létrejött, de az e-mailt nem sikerült kézbesíteni, a rendszergazda erről kifejezett visszajelzést kap — a fiók ekkor már létezik, és a helyes megoldás egy normál jelszó-visszaállítás, nem egy újabb meghívó.

Biztonsági tulajdonságok

  • Csak adminisztrátoroknak. Mindkét AJAX-végpont szerveroldalon ellenőrzi a $GLOBALS['BE_USER']->isAdmin() feltételt. Nem a gomb elrejtése a hozzáférés-védelem, hanem a végpontok. E nélkül önmagában a csoport-végpont lehetővé tenné bármely szerkesztőnek, hogy kilistázza az összes backend felhasználói csoportot.
  • Sudo mód. A fiók létrehozása kiváltja a TYPO3 megerősítő (step-up) hitelesítését.
  • Nincs jelszókiszivárgás. A helyőrző jelszó véletlenszerű, sosem jelenik meg, nem kerül naplóba, és csak hashelve tárolódik.
  • Belső hibák nem szivárognak ki. A DataHandler üzenetei, az SQL-hibák és a mailer konfigurációja PSR-3-on keresztül naplózódnak, és általános üzenet lép a helyükre, mielőtt a böngészőbe jutnának.
  • A meglévő fiókok soha nem módosulnak észrevétlenül. Az ütköző meghívást HTTP 409 utasítja el, a párhuzamos beszúrással versenyt vesztő rekord pedig visszagörgetésre kerül.

Egy következményt érdemes tudni: a meghívó linket a core password_reset_validate útvonala validálja, amely nem veszi figyelembe a $GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset'] beállítást. Ha a jelszó-visszaállítást szándékosan kikapcsoltátok ezen a telepítésen, ez az extension a meghívott felhasználók számára újra megnyitja ezt az utat.

Követelmények és telepítés

TYPO3 14.0–14.99 és PHP 8.2+. Az extension a v14-es ComponentFactory-t, az #[AsEventListener] attribútumot és a v14-es HashService-t használja, ezért nem visszafelé kompatibilis a TYPO3 13-mal.

bash
composer require digitalzombies/be-invite

Utána ürítsétek a gyorsítótárakat. Nincs adatbázis-séma-változás, nincs TypoScript és nincs mit konfigurálni — működő levelezőbeállítás viszont szükséges.

Az e-mail testreszabása

A sablonok a MAIL/templateRootPaths[1700000000] alatt vannak regisztrálva. Regisztráljatok saját útvonalat magasabb kulccsal, és tegyétek oda az Invitation.html / Invitation.txt fájlokat:

php
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['templateRootPaths'][1700000100]
    = 'EXT:my_sitepackage/Resources/Private/Templates/Email/';

Elérhető változók: name, email, resetLink.

A mellékelt sablonok csak angol nyelvűek. A meghíváskor a címzettnek még nincs backend-fiókja, így nyelvi beállítása sem, ezért a rendszer nem választ automatikusan nyelvet.

A felület nyelve

A backend felülete angol, német és magyar nyelven érhető el. A feliratok a Resources/Private/Language/{locallang,de.locallang,hu.locallang}.xlf fájlokban vannak, és a PHP-kód, valamint a JavaScript-modul közösen használja őket.