Start · Sprachen · PHP · Referenz · imap_setacl

imap_setacl

Funktion

Setzt die ACL-Zugriffsrechte (Access Control List) für ein IMAP-Postfach für einen bestimmten Benutzer.

seit PHP 4.0.7 Kategorie: http

Signatur

imap_setacl(IMAP\Connection $imap, string $mailbox, string $user_id, string $rights): bool

Beschreibung

imap_setacl() erlaubt es, die Zugriffsrechte eines bestimmten Benutzers auf ein IMAP-Postfach (Mailbox) gemäß dem ACL-Erweiterungsstandard (RFC 2086 / RFC 4314) festzulegen. Dies ist besonders nützlich in Umgebungen, in denen mehrere Benutzer auf gemeinsame Postfächer zugreifen sollen, z. B. geteilte Posteingänge in Unternehmen.

Die Rechte werden als Zeichenkette übergeben, wobei jedes Zeichen ein bestimmtes Recht repräsentiert: l (lookup/auflisten), r (read/lesen), s (keep Seen/gelesen markieren), w (write/schreiben), i (insert/einfügen), p (post), c (create/erstellen), d (delete/löschen), a (administer/verwalten). Eine leere Zeichenkette entfernt alle Rechte für den betreffenden Benutzer.

Der Aufruf erfordert, dass der verbundene IMAP-Account selbst administrative Rechte (a) auf das betreffende Postfach besitzt. Andernfalls schlägt der Aufruf fehl. Die Funktion ist nur auf Servern verfügbar, die die IMAP ACL-Erweiterung unterstützen (z. B. Cyrus IMAP, Dovecot mit ACL-Plugin).

Hinweis: Die IMAP-Erweiterung in PHP wurde in PHP 8.1 als separates PECL-Paket ausgelagert. Ab PHP 8.4 ist IMAP\Connection der korrekte Typ für das Verbindungsobjekt.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die mit imap_open() geöffnet wurde.
$mailbox Pflicht string Der vollständige Name des Postfachs in IMAP-Notation, z. B. user.shared oder {mail.example.com}INBOX.Shared.
$user_id Pflicht string Der Benutzername (Identifier) des Benutzers, dessen Rechte gesetzt werden sollen. Kann auch eine Gruppe oder anyone für alle Benutzer sein.
$rights Pflicht string Die zu setzenden Rechte als Zeichenkette, z. B. lrswipcda für Vollzugriff oder lrs für Lese-Zugriff. Eine leere Zeichenkette entfernt alle Rechte des Benutzers.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. fehlende Administratorrechte oder nicht unterstützte ACL-Erweiterung auf dem Server).

Beispiele

Leserechte für einen Benutzer auf ein geteiltes Postfach setzen

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

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

$mailbox = '{mail.example.com}shared.support';
$user    = 'alice@example.com';
$rights  = 'lrs'; // lookup, read, keep-seen

if (imap_setacl($imap, $mailbox, $user, $rights)) {
    echo "ACL erfolgreich gesetzt: {$user} hat Leserechte auf {$mailbox}";
} else {
    echo 'Fehler beim Setzen der ACL: ' . imap_last_error();
}

imap_close($imap);
ACL erfolgreich gesetzt: alice@example.com hat Leserechte auf {mail.example.com}shared.support

Alle Rechte für einen Benutzer entfernen

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

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

$mailbox = '{mail.example.com}shared.support';
$user    = 'bob@example.com';

// Leere Rechte-Zeichenkette entfernt alle Rechte des Benutzers
if (imap_setacl($imap, $mailbox, $user, '')) {
    echo "Alle ACL-Rechte für {$user} wurden entfernt.";
} else {
    echo 'Fehler: ' . imap_last_error();
}

imap_close($imap);
Alle ACL-Rechte für bob@example.com wurden entfernt.

// Wichtig · Fallstricke

Sicherheitshinweis: Übergeben Sie $user_id niemals ungefiltert aus Benutzereingaben, da dies unautorisierten Personen Zugriff auf Postfächer gewähren könnte. Validieren Sie stets, ob der übergebene Benutzername tatsächlich existiert und berechtigt ist.

Die Funktion setzt voraus, dass der verwendete IMAP-Account selbst das Recht a (Administer) auf das Zielpostfach besitzt. Ohne dieses Recht schlägt imap_setacl() stillschweigend fehl und gibt false zurück.

Nicht alle IMAP-Server unterstützen die ACL-Erweiterung. Prüfen Sie vorab mit imap_getacl(), ob der Server ACLs unterstützt. Auf Servern ohne ACL-Unterstützung gibt die Funktion immer false zurück.

Ab PHP 8.1 ist die IMAP-Erweiterung nicht mehr im PHP-Core enthalten und muss separat über PECL installiert werden.