In unserem Codebase gibt es historisch bedingt eine verwirrende Pseudogruppe namens @everyone, die für Folgendes verwendet werden kann:
- Site-Einstellungen vom Typ
group_list - Kategorienberechtigungen
- Tag-Gruppen
In einigen Fällen wird @everyone von einigen als „alle anonymen und alle angemeldeten Benutzer“ interpretiert, während andere es nur als „alle angemeldeten Benutzer“ verstehen. In der Realität bedeutet es für Site-Einstellungen jedoch in den meisten Fällen nur „alle angemeldeten Benutzer“.
Verwirrend wird es zusätzlich dadurch, dass diese @everyone-Gruppe auch bei Site-Einstellungen verwendet werden kann, bei denen es keinen Sinn ergibt, dass „alle anonymen und angemeldeten Benutzer“ Zugriff auf die Funktion haben, wie beispielsweise pm_tags_allowed_for_groups.
Dies ist auch aus der Perspektive des Feature-Flaggings und der Entwicklererfahrung verwirrend, da wir für einige anstehende Änderungen oder andere Einstellungen möglicherweise wirklich möchten, dass sie für „alle anonymen und angemeldeten Benutzer“ aktiviert werden.
Lösung
Wir führen zwei separate automatische Pseudogruppen ein:
anonymous_users (ID 4)– Repräsentiert anonyme Benutzer, die Ihre Site ohne Konto besuchenlogged_in_users (ID 5)– Repräsentiert alle angemeldeten Benutzer Ihrer Site, ähnlich wie die automatische Gruppetrust_level_0, aber spezifischer
Diese wurden bereits eingeführt, treten jedoch erst in Kraft, wenn die bevorstehende Änderung granular_anonymous_and_logged_in_groups_permissions auf Ihrer Site aktiviert ist.
Wenn die bevorstehende Änderung aktiviert ist, wird jede Einstellung, bei der everyone als ausgewählte Gruppe festgelegt ist, automatisch in die ID logged_in_users übersetzt. Daher werden beim Umschalten der bevorstehenden Änderung keine Daten in der Tabelle der Site-Einstellungen geändert. Sobald die bevorstehende Änderung dauerhaft wird, führen wir eine Datenmigration für alle Gruppeneinstellungen durch, um diese Änderung vorzunehmen.
Zusätzlich haben wir anonymous_users für mehrere Site-Einstellungen, bei denen es keinen Sinn ergibt, als disallowed_group markiert, beispielsweise für personal_message_enabled_groups.
Konflikte mit bestehenden Gruppennamen werden automatisch gelöst, indem die bestehenden Gruppen umbenannt und Erwähnungen von Gruppen in Beiträgen aktualisiert werden.
Was ist mit Tag- und Kategorienberechtigungen?
Diese Berechtigungen bleiben unverändert, da ihr Konzept von „everyone“ in einigen Punkten anders ist und nicht auf der zugrunde liegenden automatischen Gruppe basiert.
