|
Da Roundcube kein eigenes administratives Interface hat (hat es auch nicht zwingend nötig) lassen sich über die Datenbank ein paar einfache Tasks unter der Zuhilfenahme von Triggern realisieren. Glück hat hier auch, wessen MySQL Installation bereits Trigger unterstützt aber keine InnoDB Datenbanken, da Roundcube per default InnoDB verwendet und contraints enthält.
Insbesondere wenn ein Benutzer gelöscht wird, macht es Sinn seine abhängigen Daten ebenfalls zu entfernen. Der harte Approach ist das Löschen aller abhängigen Sätze, wobei das in Stufen erfolgen soll.
Annahmen:
- Wenn eine Adressgruppe gelöscht wird sollen die enthaltenen Kontaktverknüpfungen gelöscht werden.
- Wenn eine Adresse gelöscht wird sollen ihr zugrundeliegende Verknüpfungen aus den Adressgruppen gelöscht werden (sofern vorhanden).
- Wenn ein Benutzer gelöscht wird sollen seine Identitäten, seine Adressgruppen und seine Adressen gelöscht werden.
Realisation mittels Trigger in MySQL:
USE roundcube; DELIMITER // CREATE TRIGGER delete_contactgroupmembers AFTER DELETE ON contactgroups FOR EACH ROW BEGIN DELETE FROM contactgroupmembers WHERE contactgroup_id=old.contactgroup_id; END // CREATE TRIGGER delete_contactgroupmember AFTER DELETE ON contacts FOR EACH ROW BEGIN DELETE FROM contactgroupmembers WHERE contact_id=old.contact_id; END // CREATE TRIGGER delete_userentries AFTER DELETE ON users FOR EACH ROW BEGIN DELETE FROM identities WHERE user_id=old.user_id; DELETE FROM contactgroups WHERE user_id=old.user_id; DELETE FROM contacts WHERE user_id=old.user_id; END //
Jetzt kann z.B. der phpmyadmin Administrator einen Benutzer löschen und hinterlässt keine Leichensätze. Das Beispiel kann beliebig erweitert werden, wenn eigene Tabellen dazugekommen sind und ebenfalls mit der User_id verknüpft sind. Wem das zu hart ist, der ersetzt die DELETE FROM für die Dateien identities, contacts und contactgroups durche ein UPDATE SET del=1 WHERE um das delete flag zu verwenden.
siehe auch: Default Werte für neue Benutzer
RSS zu dieser FAQ
|