Start · Sprachen · PHP · Referenz · imap_getacl

imap_getacl

Funktion

Gibt die Zugriffskontrollliste (ACL) für ein IMAP-Postfach als assoziatives Array zurück.

seit PHP 4.0.7 Kategorie: http

Signatur

imap_getacl(IMAP\Connection $imap, string $mailbox): array|false

Beschreibung

imap_getacl() liest die Zugriffsrechte (Access Control List, ACL) für ein angegebenes IMAP-Postfach aus. Die Funktion setzt den IMAP-ACL-Standard (RFC 2086) voraus, der vom verwendeten IMAP-Server unterstützt werden muss (z. B. Cyrus IMAP).

Der Rückgabewert ist ein assoziatives Array, bei dem die Schlüssel die Benutzernamen (oder Gruppen/Identifier) darstellen und die zugehörigen Werte die Rechte-Zeichenketten (z. B. lrswipkxte) sind. Jeder Buchstabe in der Rechte-Zeichenkette steht für ein einzelnes Zugriffsrecht wie r (Read), w (Write), l (Lookup) oder a (Administer).

Diese Funktion ist besonders nützlich in Szenarien, in denen Postfächer mit mehreren Benutzern geteilt werden (Shared Mailboxes) und überprüft werden soll, wer welche Berechtigungen besitzt. Sie wird typischerweise in Kombination mit imap_setacl() und imap_deleteacl() verwendet, um Rechte zu verwalten.

Hinweis: Die Funktion ist Teil der IMAP-Erweiterung und seit PHP 8.1 wird das erste Argument als IMAP\Connection-Objekt anstelle einer Ressource übergeben.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die mit imap_open() geöffnet wurde. Ab PHP 8.1 ist dies ein IMAP\Connection-Objekt.
$mailbox Pflicht string Der vollständige Name des Postfachs im IMAP-Format, z. B. user.shared oder INBOX. Der Postfachname darf keine Sonderzeichen enthalten, die nicht IMAP-konform sind.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array zurück, wobei die Schlüssel die Benutzer- bzw. Gruppen-Identifiers und die Werte die zugehörigen Rechte-Zeichenketten sind. Im Fehlerfall (z. B. ungültiges Postfach oder fehlende Server-Unterstützung) wird false zurückgegeben.

Beispiele

ACL eines Postfachs auslesen und ausgeben

<?php
$imap = imap_open('{imap.example.com:143}INBOX', 'admin', 'geheimesPasswort');

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

$acl = imap_getacl($imap, 'user.shared');

if ($acl === false) {
    echo 'Fehler beim Abrufen der ACL: ' . imap_last_error();
} else {
    foreach ($acl as $benutzer => $rechte) {
        echo "Benutzer: $benutzer => Rechte: $rechte\n";
    }
}

imap_close($imap);
Benutzer: admin => Rechte: lrswipkxte Benutzer: alice => Rechte: lrs Benutzer: bob => Rechte: lr

Prüfen ob ein bestimmter Benutzer Schreibrechte hat

<?php
$imap = imap_open('{imap.example.com:143}INBOX', 'admin', 'geheimesPasswort');

$postfach = 'user.shared';
$zielBenutzer = 'alice';

$acl = imap_getacl($imap, $postfach);

if ($acl !== false && isset($acl[$zielBenutzer])) {
    $rechte = $acl[$zielBenutzer];
    if (strpos($rechte, 'w') !== false) {
        echo "$zielBenutzer hat Schreibrechte auf dem Postfach '$postfach'.\n";
    } else {
        echo "$zielBenutzer hat KEINE Schreibrechte auf dem Postfach '$postfach'.\n";
    }
} else {
    echo "Benutzer '$zielBenutzer' hat keinen Eintrag in der ACL oder Fehler beim Abruf.\n";
}

imap_close($imap);
alice hat KEINE Schreibrechte auf dem Postfach 'user.shared'.

// Wichtig · Fallstricke

Serverunterstützung erforderlich: imap_getacl() funktioniert nur mit IMAP-Servern, die RFC 2086 (IMAP4 ACL Extension) unterstützen, wie z. B. Cyrus IMAP. Dovecot benötigt das acl-Plugin. Auf Servern ohne ACL-Unterstützung gibt die Funktion false zurück.

Sicherheitshinweis: Nur Benutzer mit dem a-Recht (Administer) dürfen die ACL eines Postfachs lesen und ändern. Beim Aufbau der Verbindung sollten immer sichere Verbindungen (ssl oder tls) verwendet werden, um Zugangsdaten zu schützen.

PHP 8.1: Ab PHP 8.1 wurde der Ressource-Typ durch das IMAP\Connection-Objekt ersetzt. Code, der die alte Ressource nutzt, muss ggf. angepasst werden.