Benutzergruppen: Mitglieder automatisiert aus Benutzergruppen entfernen

  • App
    WoltLab Suite Core

    Im AdminCP lassen sich Mitglieder über die Funktion unter Benutzer > Benutzergruppen > Automatische Zuordnungen derzeit nur zu einer weiteren Benutzergruppe hinzufügen.


    Es wäre wünschenswert, könnte man hier bei Wegfall der entsprechenden Bedingungen auch Mitglieder automatisiert aus Benutzergruppen entfernen.

  • Ja, das wurde hier schon mal irgendwo gewünscht und ist derzeit wohl nur über die "kostenpflichtigen Abos" möglich (nach Ablauf der bezahlten Zeit).


    Ansonsten ist die Umsetzung aber glaube ich auch nicht leicht, nach welchen Kriterien sollte denn die "automatische Entfernung" dann erfolgen? In der Regel nehmen die Bedingungen ja eher zu statt ab (z.B. Beiträge, Punktestand, Zugehörigkeit etc.).

    Gruß

    Jörg

    (Jaydee)

  • Ansonsten ist die Umsetzung aber glaube ich auch nicht leicht, nach welchen Kriterien sollte denn die "automatische Entfernung" dann erfolgen?

    Wieso sollte das besonders schwierig sein? Andere größere kommerziellen Produkte im Bereich Community-Software (Invision Community, XenForo) bieten das standardmäßig an.

  • Ja, ich weiß. Technisch wäre das auch überhaupt kein Problem. Ich meinte damit eher, dass man dazu ja irgendein Kriterium braucht, damit der Automatismus auch arbeiten kann.

    Im WoltLab ist die autom. Beförderung eher "additiv" aufgebaut, es werden also z.B. bestimmte Anzahlen an Beiträgen/Punkten/Trophäen/Reaktionen usw. benötigt, um "aufzusteigen".


    Da diese in aller Regel später nicht wieder "abnehmen" (ok, Trophäen und Reaktionen vielleicht), müsste man einen Punkt finden, der es tut.

    Dazu müssten dann per Cron regelmäßig alle Bedingungen überprüft werden, um eine automatische "Degradierung" zu ermöglichen.

    Also genau so, wie das z.B. auch bei den Bezahl-Systemen funktioniert.

    Bedingung als "technische Condition" wäre etwa: "WENN Zeitraum x = abgelaufen UND Kontostand = '0', DANN entferne den User 'abc' aus Gruppe '123', SONST unternimm nichts".

    Gruß

    Jörg

    (Jaydee)

  • Problem hat sich mittlerweile erledigt, daher nehm ich die Fehlermeldungen mal raus.


    Ich hole das Thema mal wieder aus seinem Grab:


    Ich habe jetzt versucht, Benutzer automatisch aus Benutzergruppe 94 zu nehmen, wenn sie in Benutzergruppe 11 kommen. Dafür wollte ich einen Datenbanktrigger benutzen:


    SQL
    CREATE TRIGGER triggername
    AFTER INSERT ON wcf1_user_to_group
    FOR EACH ROW
    BEGIN
       IF NEW.groupID = 11 THEN
          DELETE IGNORE FROM wcf1_user_to_group
          WHERE groupID = 94 AND userID = NEW.userID;
       END IF;
    END;

    Was dann aber passiert ist: Der Benutzer wird aus Gruppe 2 raus genommen, nicht in Gruppe 1 eingetragen und es gibt eine Fehlermeldung:


    Code
    ...

    Und wenn man dann auf das Profil des Benutzers geht kommt folgende Fehlermeldung, die mich vermuten lässt, dass das evtl. noch ganz andere Probleme auslöst, die ich noch gar nicht gefunden habe:

    Code
    ...

    Hat jemand eine Idee, wie man das Lösen könnte? Der Trigger sollte eigentlich für eine zeitgleiche Bearbeitung sorgen, aber mit einem Cronjob, der alle paar Stunden ausgelöst wird, wäre ich auch zufrieden, bin nur leider so gar nicht in der Lage das einzurichten.

    Edited once, last by XR_DE ().

  • Je nach Bedingung würde ich dafür ggf. einen Cronjob über das erforderliche PiP einrichten, welcher in regelmäßigen Abständen Bedingungen überprüft und anschließend eine UserAction ausführt. Mit dem Handy bspw. auf die schnelle gefunden:


    https://github.com/WoltLab/WCF…UserAction.class.php#L428


    https://github.com/WoltLab/WCF…UserAction.class.php#L457


    Daran könnte man sich orientieren. Dies sollte nicht all zu komplex sein.


    Schwieriger und deutlich aufwendiger wird es, wenn die Bedingungen dynamisch im ACP erstellt werden sollen.

  • Hat jemand eine Idee, wie man das Lösen könnte?

    Siehe PN, hab gerade mal paar Minuten gehabt und das in Form eines Cronjobs als Paket umgesetzt. Du kannst pro Benutzergruppe eine oder mehrere Inkompatibel Benutzergruppen auswählen, was dazu führt, dass der Benutzer dann durch den Cronjob entfernt wird sobald er in der bearbeiteten Benutzergruppe ist.



    Ich habe das in der Testumgebung bei mir mal mit einigen Nutzern getestet, hat alles geklappt. Ich habe bei riesigen Datenbank aber noch etwas Angst, dass die execution time versagt - deshalb erstmal per PN, falls du Bock hast das schonmal zu testen und dir anzusehen:D

  • Er hat bereits eine Lösung ;) Siehe:

    Problem hat sich mittlerweile erledigt

    Ich hatte das Plugin für die automatische Gruppenentfernung bereits seit über einem Jahr als Eigenentwicklung im Einsatz, habe es aber nur vereinzelt weitergegeben und nie veröffentlicht, was ich jetzt allerdings nachgeholt habe, bevor sich zunehmend Leute ihre Installationen zerschiessen ^^


    Wenn das Plugin geprüft und freigegeben wurde, ist eine gespiegelte Version der automatischen Gruppenzuweisungen im Plugin-Store verfügbar, bei der beliebig viele "Entfernungen" erstellt und alle vom WSC gewohnten Bedingungen verwendet werden können.


    Ich habe bei riesigen Datenbank aber noch etwas Angst, dass die execution time versagt

    Der UserGroupAssignmentCronjob hat bspw. ein Limit von 1000 zeitgleichen Zuweisungen. Wenn du deinen Ansatz weiter verfolgen solltest, könntest du auf so eine Lösung zurückgreifen :)

  • Passt schon, hat mich zumindest zwecks Cronjobs hier etwas weiter gebracht. ;) Vor einigen Wochen wusste ich noch nichtmal, was die package.xml ist :D Mittlerweile krieg ich solche Dinge recht easy umgesetzt im WSC.

    Wenn du deinen Ansatz weiter verfolgen solltest, könntest du auf so eine Lösung zurückgreifen

    Danke für die Info. Ich selber benötige das Plugin nicht wirklich, deshalb verfolge ich das nicht weiter. Ich denke du hast da mehr Energie reingesteckt und somit durchaus mehr Optionen verfügbar gemacht. 8o

  • Das Plugin wurde nun geprüft und nach ein paar Sicherheitsanpassungen freigegeben.

    Ich verlinke es einmal, damit zukünftige Leser eine Lösung zu dem Thema vorfinden :)

  • Das ist genau die Funktion, die ich im WoltLab mit am meisten vermisst habe.

    Vielen Dank für dieses Plugin! Ich habe es gerade kurz getestet und es funktioniert klaglos. :) Somit kann man endlich auch wieder "Rückwärts-Bedingungen" erstellen, quasi Degradierungen nach Ablauf bestimmter Bedingungen.


    Es bietet sich beispielsweise an, wenn man zusätzlich zur "System-Sperre" eine Benutzergruppe für gesperrte User erstellt hat, um diese vernünftig zu kennzeichnen (z.B. mit einem Benutzerrang und/oder besonderer Darstellung des Namens). Das unterstützt das WoltLab leider (bis auf dieses kleine "Schlösschen") nicht und wenn ein User wieder "entsperrt" wurde, verblieb er weiterhin in dieser Gruppe.

    Das ist Dank Plugin nun Schnee von gestern, es greift problemlos auch in diesem Fall und der User wird vernünftig "entsperrt". :thumbup:


    Für diesen Fall braucht man also

    1. eine Bedingung, die den gesperrten Benutzer automatisch der Sperr-Gruppe zuweist
    2. eine Bedingung, die entsperrte Benutzer automatisch wieder aus dieser Gruppe entfernt

    Beides ist in wenigen Sekunden eingerichtet.

    Gruß

    Jörg

    (Jaydee)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!