WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 06.12.2025 12:42:39

kleo
Member

Passwortgeschütze Inhalte per Droplet anzeigen

Moin!

Auf einer Webseite hatte ich die gleiche Problematik: ich wollte bestimmte Inhalte nur passwordgeschüzt zeigen, gleichzeitig wollte ich nicht, dass die Leute im Backend des CMS eingelogt werden.

Ich habe so ein Modul richtig vermisst!

Ich habe aber die Problematik mittels eines Droplets gelöst. Als Grundlage habe ich SectionsPicker Droplet genommen und modifiziert.

Hier ist der modifizierter Code:

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

$sid    = isset($sid) ? intval($sid) : 0;
$anchor = isset($anchor) ? (string)$anchor : '';
$requiredPassword = isset($pwd) ? (string)$pwd : '';
$sessionKey = 'section_access_' . $sid;
$enteredPassword = $_POST['section_password'] ?? '';
if ($requiredPassword !== '') {
    if (!isset($_SESSION[$sessionKey]) || $_SESSION[$sessionKey] !== true) {
        if ($enteredPassword === $requiredPassword) {
            $_SESSION[$sessionKey] = true;
        } else {
            return '
                <form method="post">
                    <label>Bitte Passwort eingeben:</label><br>
                    <input type="password" name="section_password">
                    <button type="submit">Anzeigen</button>
                </form>
                ' . ($enteredPassword !== '' ? '<p style="color:red;">Falsches Passwort!</p>' : '');
        }
    }
}
return get_section_content($sid, false, $anchor);

Der Aufruf erfolgt wie beim SectionsPicker gewöhnt durch:

[[pwdsectionspicker?sid=1234&pwd=Geheim123]]

Last edited by florian (21.12.2025 20:00:22)

Offline

Liked by:

byteworker, jean

#2 06.12.2025 17:36:13

beach
Member

Re: Passwortgeschütze Inhalte per Droplet anzeigen

pfreud01 wrote:

So ganz verstehe ich deine Frage nicht. Genau das macht das Modul ja. Es fragt ein Passwort ab und gibt, wenn richtig, den Content aus. angel
[...]

Das Zeigt wie unterschiedlich die Herangehensweise sein können. kleo hat nochmals eine andere Richtung eingeschlagen.
Im Endeffekt kommt es darauf an das es funktioniert.
thumb_up

Offline

#3 21.12.2025 09:56:27

kleo
Member

Re: Passwortgeschütze Inhalte per Droplet anzeigen

Moin!!

ich habe Droplet weiter modifiziert. Zum Passwort ist auch Login dazu gekommen und die Möglichkeit nicht nur eine, sondern mehrere Sectionen (Abschnitte) zu zeigen.

Die zu zeigende Abschnitte werden unter sid= mit Komma getrennt eingegeben und in der eingegebenen Reihenfolge dargestellt.
Bei Login/Passwort ist es möglich mehrere Logins und Passwörter einzugeben, die dann in der Reihenfolge wie eingegeben: Login1/Passwort1, Login2/Passwort2 usw gelten.

Werden z.B. 3 verschiedene Logins eingegeben, aber nur ein Passwort, gilt dieses für alle 3 Logins.


Hier ist der modifizierte Code:

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}
$sidParam   = $sid ?? '';
$loginParam = $login ?? '';
$pwdParam   = $pwd ?? '';

$enteredLogin    = $_POST['section_login'] ?? '';
$enteredPassword = $_POST['section_password'] ?? '';
$sidList = array_filter(array_map('intval', explode(',', $sidParam)));
$logins    = array_filter(array_map('trim', explode(',', $loginParam)));
$passwords = array_filter(array_map('trim', explode(',', $pwdParam)));
$credentials = [];
if (count($passwords) === 1) {
    // 1 Passwort für alle Logins
    foreach ($logins as $loginName) {
        $credentials[$loginName] = $passwords[0];
    }
} else {
    // 1:1 Zuordnung (minimale Länge)
    $count = min(count($logins), count($passwords));
    for ($i = 0; $i < $count; $i++) {
        $credentials[$logins[$i]] = $passwords[$i];
    }
}
$groupKey = hash('sha256', json_encode($credentials));
$sessionKey = 'section_access_group_' . $groupKey;
$cookieKey  = 'section_access_group_cookie_' . $groupKey;
if (isset($_COOKIE[$cookieKey]) && $_COOKIE[$cookieKey] === $groupKey) {
    $_SESSION[$sessionKey] = true;
}
if (!isset($_SESSION[$sessionKey]) || $_SESSION[$sessionKey] !== true) {
    if (
        $enteredLogin !== '' &&
        isset($credentials[$enteredLogin]) &&
        $enteredPassword === $credentials[$enteredLogin]
    ) {
        $_SESSION[$sessionKey] = true;

        // Cookie setzen (7 Tage)
        setcookie(
            $cookieKey,
            $groupKey,
            time() + (7 * 24 * 60 * 60),
            '/',
            '',
            false,
            true
        );
    } else {
        return '
            <form method="post">
                <label>Login:</label><br>
                <input type="text" name="section_login"><br><br>
                <label>Passwort:</label><br>
                <input type="password" name="section_password"><br><br>
                <button type="submit">Anmelden</button>
            </form>
            ' . (($enteredLogin !== '' || $enteredPassword !== '') 
                ? '<p style="color:red;">Login oder Passwort falsch!</p>' 
                : '');
    }
}
$output = '';
foreach ($sidList as $singleSid) {
    $output .= get_section_content($singleSid, false, '');
}

return $output;

Der Aufruf:

[[pwdsectionspicker?sid=10,20&login=alice,bob&pwd=passA,passB]]
oder nur mit einem Passwort
[[pwdsectionspicker?sid=10,20,30&login=user1,user2,user3&pwd=secret]]

Man kann beliebig viele Logins und Passwörter eingeben, bei mehreren wird es aber schnell unübersichtlich.
;-)

Offline

#4 21.12.2025 10:11:24

kleo
Member

Re: Passwortgeschütze Inhalte per Droplet anzeigen

P.S.
Angemeldet bleibt man 7 Tage.
Wenn jemand es ändern möchte, Parameter in dieser Zeile ändern:

        time() + (7 * 24 * 60 * 60),

Tage * Stunden * Minuten * Sekunden

Offline

#5 21.12.2025 17:25:42

florian
Administrator

Re: Passwortgeschütze Inhalte per Droplet anzeigen

Ich hab das mal vom Ursprungsthread angetrennt


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

#6 21.12.2025 20:01:07

florian
Administrator

Re: Passwortgeschütze Inhalte per Droplet anzeigen

Themenbezeichnung war falsch, mein Fehler, sorry. Ist jetzt korrigiert


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Board footer

up