Habe einen relativ einfachen Lösungsansatz gefunden, der unsere Anforderungen ausreichend erfüllt:
Aktuell wird ja davon ausgegangen, dass es immer je Mitglied und Rolle maximal einen Rolleneintrag gibt (egal ob aktuelle oder ehemalige Rollenmitgliedschaft). Unser Anforderungen sind aber, dass je Mitglied und Rolle maximal ein aktiver und beliebig viele ehemalige Rolleneinträge möglich sind.
Da die aktiven Rolleneinträge an Hand des End-Datums 31.12.9999 einfach erkannt werden können, helfen folgende Anpassungen, unsere Anforderung zu erfüllen:
Anpassung in der Datei /adm_program/system/classes/table_members.php
Zeile 82 und 113:
Code: Alles auswählen
$this->readData(array('rol_id' => $rol_id, 'usr_id' => $usr_id), "mem_end = '9999-12-31'");
Anpassung in der Datei /adm_program/modules/profile/roles_ajax.php
Zeile 104:
Code: Alles auswählen
$mem->readData(array('rol_id' => $_GET['rol_id'], 'usr_id' => $_GET['usr_id']), "mem_end = '9999-12-31'");
Damit mehrere Einträge der gleichen Rolle bei einem Mitglied auch in der DB gespeichert werden können, muss bei der Tabelle "adm_members" der Typ des Index "ak_rol_usr_id" von "UNIQUE" auf "INDEX" geändert werden.
Noch offenes Problem:
Beim Löschen von "ehemaligen Rollen" wird nicht immer derjenige Eintrag gelöscht, bei dem auf das X geklickt wurde. Das liegt daran, dass der Eintrag nicht über die ID des Datensatzes sondern über die ID von Mitglied und Rolle gelöscht wird.
Da die historischen Einträge für uns wichtig sind und somit auch nicht gelöscht werden sollen, können damit gut leben und bei Fehleingaben auch mal die Daten direkt in der DB anpassen/löschen.
Ansonsten konnten wir bisher keine Unzulänglichkeiten entdecken.
Vielleicht hilft's ja auch anderen.
Gruss Hausi