Signatur
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
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);
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);
// 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.