Benutzer, die auf ein Thema in einer geschützten Kategorie zugegriffen haben

Ich könnte etwas Hilfe gebrauchen. Mit SQL bin ich völlig überfordert.

Ich verwalte ein Forum für meine Gewerkschaft. Ich bin zwar gewählter Vertreter, aber nicht in der Führungsebene. Der Grund, warum ich die Verwaltung übernehme, ist, dass ich bereits Erfahrung mit Discourse habe. Ich habe es eingerichtet, um unsere interne Kommunikation zu modernisieren (Teamzusammenarbeit), und ich bin derzeit der Einzige (von uns 20), der wirklich Ahnung davon hat, wie man Dinge auf technischer Ebene hinter den Kulissen macht, die über die Nutzung eines Website-Builders hinausgehen. Der Punkt ist: Unsere Gruppe ist im Umgang mit Endbenutzer-Technik versiert, aber nicht „hinter den Kulissen".

Da dies ein Arbeitsbereich für uns alle ist, einschließlich der Führungsebene, habe ich einige Kategorien für sie eingerichtet, in die ich nicht hineinschnüffeln sollte. (Man könnte sagen, das geht über meinen Lohnsatz hinaus.)

Da es keine echte Möglichkeit gibt, Inhalte vor einem Administrator zu verbergen, habe ich eine Theme-Komponente mit CSS erstellt, um Folgendes zu tun:

  • Schaltflächen für Nachrichten in Benutzerprofilen auszublenden
  • Die Schaltfläche „Imitieren" in Administratorprofilen auszublenden
  • Die Vorschau von Themen auf der Kategorien-Seite auszublenden.
  • Die Themenliste innerhalb der Kategorien für alle auszublenden.
    • Anschließend die Sichtbarkeit der Themenlisten für Mitglieder einer (primären) Gruppe wiederherstellen.

Kurz gesagt: Ich erstelle eine Reihe von Protokollen und Prüfpfaden, die verfügbar sein sollen, falls sie überprüfen möchten, dass ich nicht schnüffle.

  1. Sie können in den Site-Protokollen nachsehen, ob ich jemals diese Theme-Komponente berühre (bearbeite/deaktiviere), ohne dass sie davon wissen. Sie können dann nachfragen und Details sehen.
  2. Wenn ich jemals die Funktion „Imitieren" oder „Nachrichten anzeigen" nutze, wird dies ebenfalls in den Protokollen festgehalten.

Im Grunde genommen: Wenn ich jemals das CSS, das ich geschrieben habe, um diese Dinge auszublenden, manipuliere, können sie es sehen und mich auffordern, mich zu erklären.

  1. Wenn ich mich selbst zu ihrer Gruppe hinzufüge, damit der Inhalt für mich sichtbar ist, zeigt das Gruppenprotokoll, dass ich mich selbst hinzufüge/entferne. Sie können mich auffordern, mich zu erklären.

Wobei ich Hilfe brauche:
Wenn ich die Seite jemals mit deaktivierten CSS-Stilen anschaue, kann ich die URLs der Themen sehen. Dann kann ich die Themen natürlich direkt öffnen. Was ich möchte, ist eine Data-Explorer-Abfrage, die sie (das Führungsteam, das alle Administratorzugriff erhalten) von Zeit zu Zeit ausführen können, um Themen anzuzeigen, die innerhalb einer Kategorie von einem Benutzer angesehen wurden, der kein Mitglied der Gruppe „executive" ist.
Sie haben keine Ahnung, dass dies möglich ist, aber ich möchte alle Eventualitäten abdecken. Ich möchte dies mit den verfügbaren Tools so gut wie möglich zukunftssicher machen.

Also brauche ich erneut eine Data-Explorer-Abfrage, die Folgendes tut:

  1. Wenn der Benutzer nicht zur Gruppe „executive" gehört
  2. Dann die von Benutzer(n) in der Kategorie „EB" (oder Kategorie-ID: 34) angesehenen Themen anzeigen

Dies kombiniert mit dem von mir angewendeten CSS-Whiteout schafft genügend einen Prüfpfad, der besagt: Wenn jemand (ich oder jemand, der nicht zum Führungsteam gehört, aber in Zukunft Administratorzugriff erhalten könnte) Themen innerhalb dieser Kategorie angesehen hat und kein Mitglied des Führungsteams ist, dann hat er sich wirklich große Mühe geben müssen, und es handelt sich um absichtliches Schnüffeln.

Kann mir jemand dabei helfen?

Ich denke, du solltest dafür ein neues Thema eröffnen…

Aber du kannst es versuchen (und SQL lernen) :wink:

Punkt 1:

-- [params]
-- string :gname = executive
-- string :uname = SidV
SELECT u.username, g.id as "group id", g.name
FROM group_users gu, users u, groups g
WHERE g.id = gu.group_id
AND u.id = gu.user_id
AND g.name ILIKE :gname
AND u.username ILIKE :uname

Punkt 2

Ich verstehe deinen Punkt nicht… was brauchst du genau?

Siehe die Abfrageliste und versuche, eine Abfrage an deine Bedürfnisse anzupassen.

3 „Gefällt mir“

Grundsätzlich eine Abfrage schreiben, um alle Themen anzuzeigen, die in Kategorie 1 oder 2 von einem Benutzer gelesen wurden, der nicht der Gruppe A zugewiesen ist.

Benutzer, die auf ein Thema in einer geschützten Kategorie zugegriffen haben

Diese Abfrage gibt alle topic_users (Benutzer, die ein Thema angesehen oder darin gepostet haben) zurück, die keine Mitglieder der für die Abfrage angegebenen :group_name-Gruppe sind, für Themen in Kategorien, die die Gruppe in ihren Sicherheitseinstellungen haben. Dies kann verwendet werden, um Administratoren zu finden, die ein Thema in einer Kategorie angesehen haben, der Gruppenberechtigungen hinzugefügt wurden.

--[params]
-- string :group_name

WITH allowed_users AS (
SELECT user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
group_categories AS (
SELECT category_id
FROM category_groups cg
JOIN groups g
ON g.id = cg.group_id
WHERE g.name = :group_name
)

SELECT
tu.user_id,
tu.topic_id,
tu.last_visited_at::date
FROM topic_users tu
JOIN topics t
ON t.id = tu.topic_id
WHERE t.category_id IN (SELECT category_id FROM group_categories)
AND tu.user_id NOT IN (SELECT user_id FROM allowed_users)
ORDER BY t.category_id
4 „Gefällt mir“