Benutzergruppen: Mitglieder per "Oder"-Bedingung suchen

  • App
    WoltLab Suite Core

    Im ACP kann man ja bei der Suche nach Benutzern (oder der automatischen Benutzergruppen-Zuordnung) die Benutzer suchen / auswählen, die bestimmten Benutzergruppen angehören. Das ist gut. Leider gibt es hier bei der Checkbox-Auswahl nur eine "Und"-Verknüpfung: "Benutzer müssen in allen ausgewählten Benutzergruppen Mitglied sein." Das ist weniger gut.

    Wir arbeiten viel mit Benutzergruppen - und auch mit vielen Benutzergruppen :) Die sind bei uns teils hierarchisch gedacht (leider nicht so angelegt, siehe Wunsch Benutzergruppen-Hierarchie). Sprich: Benutzer werden bei uns teilweise erst dann in eine Benutzergruppe aufgenommen, wenn sie einer anderen (Unter-)Benutzergruppe angehören.

    Deshalb bräuchten wir für die Suche (und auch für die automatische Benutzergruppen-Zuordnung) eine "Oder"-Verknüpfung bei der Auswahl der Benutzergruppen, also eine Checkbox-Auswahl der Art: "Benutzer müssen in einer ausgewählten Benutzergruppen Mitglied sein." (nicht: "In allen").

    Das würde uns die Arbeit sehr erleichtern (und viele gespeicherte Benutzergruppen-Zuordnungen einsparen).

    Viele Grüße,

    smers

  • Ich habe aber teilweise "Hauptgruppen" mit bis zu zehn "Untergruppen". Denn wenn ein Benutzer Mitglied einer von zehn "Untergruppen" ist, soll er/sie auch automatisch Mitglied der "Hauptgruppe" werden. Um das per automatischer Benutzergruppen-Zuordnung abbilden zu können, muss ich aktuell zehn Zuordnungen anlegen. Würde die Abfrage mit "oder" arbeiten, würde hier eine Zuordnung reichen.

    Dabei, wichtig: Für die Auswahl "nicht in Benutzergruppen" müsste die "Oder"-Verknüpfung natürlich auch eingeführt werden, das hatte ich oben nicht extra erwähnt.

    Denn um die Benutzer wieder aus der "Hauptgruppe" zu entfernen, wenn sie nicht mehr Mitglied einer "Untergruppe" sind, muss ich aktuell ja auch wieder zehn Zuordnungen speichern - insgesamt also 20. Würde der Wunsch umgesetzt, wären es nur zwei :)

    Viele Grüße,

    smers

  • Wie stellst Du Dir das denn konkret vor? Möchtest Du eine grundsätzliche oder-Verknüpfung an den genannten Stellen?


    Gruß norse

    Zugang zu meinen Arbeiten und dem dazugehörigen Support bekommt Ihr bei Interesse hier und hier.

  • Möchtest Du eine grundsätzliche oder-Verknüpfung an den genannten Stellen?

    Nein, optional. Man kann ja bei der Suche bzw. automatischen Zuordnung von Benutzergruppen die gewünschten Gruppen auswählen bei den Bedingungen:

    • in Benutzergruppen
    • nicht in Benutzergruppen

    Bei beiden Bedingungen werden aktuell alle angeklickten Benutzergruppen per "und" verknüpft. Hier würde ich mir einfach eine Abfrage / Auswahlmöglichkeit wünschen, ob die gewählten Benutzergruppen (wie aktuell) per "und" oder (neu) per "oder" verknüpft werden sollen.

    Noch einmal zur Verdeutlichung: Wenn ich einen Benutzer zur "Hauptgruppe" H1 hinzufügen möchte, weil er Mitglied in der "Untergruppe" U1 geworden ist, muss ich aktuell für jede "Untergruppe" U1, U2, U3 etc., eine Abfrage speichern. Denn der Benutzer ist ja nur in einer "Untergruppe" Mitglied geworden, nicht in allen.

    Viele Grüße,

    smers

  • Das ist technisch nicht so einfach wie eine UND-Verknüpfung. Denn für eine ODER-Verknüpfung, muss ich alle Parameter der Benutzersuche/Bedingungen in eine WHERE-Bedingung quetschen, bei UND kann ich diese einfach aneinanderreihen.

    Daher vermute ich, dass du dies selbst entwickeln werden musst, damit es deinen speziellen Use-Case abdeckt.

    VG

    Fr33chen

  • Danke für Deine Einschätzung. Dann hoffe ich mal, dass WoltLab das hinbekommt. Ich selber möchte da ungern etwas entwickeln. Denn so speziell ist mein Use-Case gar nicht.

    Dass man nach Benutzern sucht, die sich entweder in Benutzergruppe A oder Benutzergruppe B befinden, dürfte bei denen, die mit Benutzergruppen arbeiten, relativ häufig vorkommen.

    Viele Grüße,

    smers

  • Das ist technisch nicht so einfach wie eine UND-Verknüpfung. Denn für eine ODER-Verknüpfung, muss ich alle Parameter der Benutzersuche/Bedingungen in eine WHERE-Bedingung quetschen, bei UND kann ich diese einfach aneinanderreihen.

    Daher vermute ich, dass du dies selbst entwickeln werden musst, damit es deinen speziellen Use-Case abdeckt.

    Ich glaube, du hast ihn falsch verstanden. Es geht um ein "in einer der angegebenen Gruppen" anstatt "in allen angegebenen Gruppen". Das ist rein vom SQL her sehr einfach. Betrachten wir uns einmal die Zeile, welche das SQL für "in allen angegebenen Gruppen" zusammenstellt:

    PHP: lib/system/condition/UserGroupCondition.class.php
                            $objectList->getConditionBuilder()->add('user_table.userID IN (SELECT userID FROM wcf'.WCF_N.'_user_to_group WHERE groupID IN (?) GROUP BY userID HAVING COUNT(userID) = ?)', [$conditionData['groupIDs'], count($conditionData['groupIDs'])]);

    Das generierte SQL-Fragment sieht dann also z.B. so aus:

    SQL
    user_table.userID IN (SELECT userID FROM wcf1_user_to_group WHERE groupID IN (5, 6, 7) GROUP BY userID HAVING COUNT(userID) = 3)

    Wenn wir jetzt den Falle "in einer der angegebenen Gruppen" umsetzen würden, würde der dafür zuständige PHP Code z.B. wie folgt aussehen:

    PHP
    $objectList->getConditionBuilder()->add('user_table.userID IN (SELECT userID FROM wcf'.WCF_N.'_user_to_group WHERE groupID IN (?))', [$conditionData['groupIDs']]);

    und das generierte SQL-Fragment wie folgt:

    SQL
    user_table.userID IN (SELECT userID FROM wcf1_user_to_group WHERE groupID IN (5, 6, 7))

    Das generierte SQL-Fragment ist von daher sogar einfacher als das für "in allen angegebenen Gruppen".

    MfG Markus Zhang (aka RouL)

  • Ich bezog mich auf die Kombination. Aktuell werden in der Suche verschiedenen Bedingungen mit UND verknüpft. Das in ODER umzuwandeln ist erheblich komplizierter.

    Das die reine Abfrage, ob ein User in einer der selektierten Bedingungen Mitglied ist, ist natürlich keine Schwierigkeit, wäre aber inkonsistent/inkonsequent mit der restlichen Selections-Maske und kann ich mir daher im Standard kaum vorstellen (denn dann käme sicher bald die Forderungen nach anderen ODER-Verknüpfungen). Und nur das wollte ich herausstellen. :)

    VG

    Fr33chen

  • Ich bezog mich auf die Kombination. Aktuell werden in der Suche verschiedenen Bedingungen mit UND verknüpft. Das in ODER umzuwandeln ist erheblich komplizierter.

    Das ist korrekt, deswegen schrieb ich, dass du ihn ggf. falsch verstanden hättest. Er hat sich da ein wenig merkwürdig ausgedrückt. Eine generelle Möglichkeit Dinge mit "ODER" zu verknüpfen ist ja garnicht gewünscht.

    Ob die Idee konsistent mit dem Rest der Maske umsetzbar ist würde ich nicht komplett verneinen, auch wenn ich gerade keine Idee hätte, wie man das rein vom Formular her passend umsetzen kann. Deswegen habe ich mich auch lediglich auf den technischen Teil bezogen. :)

    So oder so könnte ich mir vorstellen, dass zwar sein Szenario eher ungewöhnlich ist, der Wunsch nach einer Auswahl, wie er Sie an dieser Stelle haben möchte aber auch für andere sinnvoll sein könnte. ^^

    MfG Markus Zhang (aka RouL)

  • So oder so könnte ich mir vorstellen, dass zwar sein Szenario eher ungewöhnlich ist, der Wunsch nach einer Auswahl, wie er Sie an dieser Stelle haben möchte aber auch für andere sinnvoll sein könnte. ^^

    Sorry, wenn ich mich unverständlich ausgedrückt habe. Vielleicht hätte ich unsere Arbeitsweise einfach weglassen sollen :)

    Ihr habt's schon richtig verstanden. Dort, wo man aktuell Benutzer nach dem Merkmal "in Benutzergruppen" selektieren kann, funktioniert's aktuell nach:

    "Benutzer müssen in allen ausgewählten Benutzergruppen Mitglied sein."

    Ich hätte gern dort zusätzlich die Möglichkeit:

    "Benutzer müssen in einer der ausgewählten Benutzergruppen Mitglied sein."

    So auch bei dem darunter stehenden Merkmal "nicht in Benutzergruppen": Statt nur

    "Benutzer dürfen in keiner der ausgewählten Benutzergruppen Mitglied sein."

    hätte ich gern auch die Option:

    "Benutzer dürfen nicht in einer der ausgewählten Benutzergruppen Mitglied sein."

    Viele Grüße,

    smers

  • Alexander Ebert February 9, 2021 at 1:17 PM

    Added the Label Won’t be implemented

Participate now!

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