Thema:
Woche #4: Vertrauen und Effekte (langer Post) flat
Autor: Rocco
Datum:23.04.23 16:01
Antwort auf:Der maniac-forum.DEV Videotagebuch-Thread von Rocco

Wie letzte Woche geschrieben, habe ich mich die vergangenen Tagen vornehmlich um das neue Berechtigungssystem gekümmert. Mit dem Fortschritt bin ich äußerst zufrieden. Aktuell klappt alles, wie ich mir das so vorstelle und sehe aktuell keine Stolpersteine bei der Implementierung.

Im heutigen längeren Post wollte ich euch mal das System dahinter erläutern und wie das alles ineinander greift. Das ist teils ein bisschen technisch aber für die Interessierten sicherlich ganz interessant.

Im neuen Forum werdet ihr zunächst mal mit drei neuen Features beglückt: Vertrauensstufen, Abzeichen und Zugangskarten. Was soll das alles sein?

Vertrauensstufen (aka Levels)

Ich habe mich auf lediglich vier Vertrauensstufen festgelegt. Passende deutsche Bezeichnungen muss man sich noch ausdenken.

Anonymous: ein Besucher der nicht eingeloggt ist und damit nur Leserechte hat
Newcomer: ein neuer Account, der noch diversen Einschränkungen unterliegt
Regular: ein vollwertiges Mitglied ohne Einschränkungen
Veteran: User, die praktisch zum Inventar gehören und das Rückgrat der Community bilden. Sie bekommen ein paar Sonderrechte, z.B. Zugriff auf archivierte Foren oder eine weniger strenge Editiersperre, etc.

Abzeichen (aka Awards)

Abzeichen erhält man automatisch im Zuge der eigenen Aktivitäten und sind zum einen für die persönliche Statistik und zum Anderen für die Einordnung seiner selbst in eine Vertrauensstufe relevant. Für was man Abzeichen erhält, muss ich mir noch überlegen, aber hier werde ich mich von anderen Foren und natürlich euren Vorschlägen inspirieren lassen. Hier etwa eine Auswahl aus einem anderem System:

[https://i.imgur.com/qcm9fHu.png]

So könnte etwa  der Aufstieg vom Newcomer zum Regular dadurch begründet sein, dass dieser für seine Postings mindestens drei "10-Likes-Erhalten"-Abzeichen gesammelt hat. Für den Veteranen-Status könnte man festlegen, dass ein Abzeichen à la "In den letzten 100 Tagen an 60 Tagen aktiv gewesen" notwendig ist oder auch eine Kombination unterschiedlichster Abzeichen.


Zugangskarten (aka Badges)

Während Vertrauensstufen und Abzeichen automatisch durch die eigene Nutzeraktivität festgelegt werden, gibt es noch die Zugangskarten, die den Funktionsumfang des Forums über die Rechte der einzelnen Vertrauensstufen hinaus erweitern. Hiervon gibt es aktuell deren drei:

1. Moderator-Badge: für Zugriff auf Moderatorenfunktionen sowie Zugang zum Mod-Forum

2. VIP-Badge: räumt noch zu definierende VIP-Rechte, ein schönes Symbol am Nickname, sowie Zugang zum VIP-Forum ein.

3. M!-Badge: bekommt jeder importierte Maniac-User. Hebt die Rechte automatisch auf den Stand der Vertrauensstufe "Regular", ohne dass man die dafür notwendigen Abzeichen sammeln muss.

Die Kombination aus Level, Awards und  Badges bestimmen also zum Großteil darüber, was ein User im Forum so treiben kann. Um Rechte entsprechend zu checken, kommt das neue attributbasierende Rechtesystem zum Einsatz..

Rollen vs Attribute aka Effekte

Wie letzte Woche bereits geschrieben, nutzt das Maniac aktuell ein einfaches System, um zu überprüfen, ob etwas erlaubt ist oder eben nicht. Ist ein User eingeloggt, kann er alles im Forum machen, ansonsten eben nur lesen. Das Ganze wird um ein paar Funktionen ergänzt, wenn ein User in der Datenbank das Merkmal Mod bzw. Admin besitzt. Das war’s im Grunde auch schon.In so einem vereinfachten Rollensystem wird  dann am Ende im Code  if/else-mäßig agiert, also z.B. wenn der User ein Moderator ist , dann darf der Post gelöscht werden.

Das neue System setzt nicht mehr (zwangsläufig) am User direkt an, sondern verteilt im ganzen System Attribute, deren Kombination  am Ende darüber entscheidet, ob eine Aktion ausgeführt werden kann oder eben nicht. Attribute werden über die Vertrauensstufen gruppiert, über Badges ergänzt und  können darüber hinaus auch individuell auf einzelne Entitäten (User, Post, …) des Forums angewandt werden.

Das klang jetzt vermutlich etwas kompliziert!?

Ihr könnt euch das wie bei einem RPG vorstellen, bei dem Charakter-Effekte die Möglichkeiten beim Kampf einschränken (sleep, poisoned,,...) oder verbessern (agility boost). Intern bezeichne ich diese Attribute im Übrigen auch als Effekte,  daher im Folgenden auch so genannt.

Das Schöne an diesen Effekten ist, dass man nun nicht lediglich statisch anhand einer Rolle festlegt, was jemand darf oder nicht, sondern auch granular entscheiden kann, unter welchen Voraussetzungen bzw. unter welchen Umständen irgendwas passieren kann. Ich versuch mich mal an einem konkreten Beispiel:

Szenario: Ein neuer User hat sich registriert und bekommt damit die Vertrauensstufe “Newcomer”. Folgende Effekte kommen (zusammengefasst) mit dieser Vertrauensstufe einher:

Der neue User darf maximal drei neue Themen und 10 Kommentare pro Tag veröffentlichen. Editieren ist nicht möglich, genauso wenig das Schreiben von privaten Nachrichten. Posts dürfen nicht länger als 3000 Zeichen sein und dürfen nicht mehr als zwei Links und zwei Bilder enthalten. Last but not least dürfen Newcomer keine Posts melden und auch keine anderen User auf die Ignoreliste sitzen.

Im Admin-Teil, wo man Effekte den Levels und Badges zuordnet, sieht das übrigens aktuell so aus. Beispielhaft sieht man hier in der vorletzten Zeile ("Newcomer creates new Topic under strict conditions") was für Effekte auf diese Aktion in diesem Level liegen (=> damit der Post des Users akzeptiert wird, darf dieser nicht größer als 3000 Zeichen sein, nicht mehr als 2 links, images, etc beinhalten und der User muss an diesem Tag weniger als drei Themen veröffentlich haben).

[https://i.imgur.com/QBcsZoI.png]

In einem rollenbasierten System wäre das Alles in einem ersten Wurf zwar auch mit Sicherheit irgendwie abbildbar - am Ende ist die Vertrauensstufe einer Rolle ziemlich ähnlich - aber was ist, wenn jetzt noch andere Rahmenbedingungen hinzu kommen, die nicht alle “Newcomer”-Nutzer betreffen? Zum Beispiel folgende Situation:

Leider fällt nach kurzer Zeit auf, dass der neue User den Politik-Thread ziemlich aufmischt. Andere User springen darauf an und es herrscht insgesamt eine toxische Atmosphäre

Die Mods können nun abwägen, wie sie mit der Situation umgehen:

- Alle einmal ermahnen und den Newcomer-User komplett sperren, hoffend, dass sich der Rest von selbst gibt (sozusagen der klassische Weg)
- Sie können einzelne Streithähne per User-Effekt aus dem Politik-Thread aussperren
- Sie können den Politik-Thread selbst bis auf Weiteres per Thread-Effekte verlangsamen, so dass z.B. nur noch allgemein alle vier Stunden gepostet werden kann und eine Edit-Sperre besteht. Diese Einschränkung soll aber nicht für Mods gelten.
- oder was auch immer situativ angemessen ist...

Der Punkt ist, dass man nun individuell die Möglichkeit hat, einzelne User oder eben Funktionen mit Effekten zu versehen, die gegen die ausgeführte User-Aktion, also z.B. "Kommentar im Politik-Thread  schreiben”, gecheckt werden. Das ist in einem starren, rollenbasierten System nicht sinnvoll implementierbar und noch schwieriger zu erweitern.

Am Ende werden jedenfalls alle Effekte für das aktuelle Szenario und die Aktion gecheckt und entschieden, ob der User nun posten darf oder nicht.

Ich werde diese Woche versuchen, alle möglichen Foren-Aktionen im Backend zu implementieren und bei Aufruf gegen Effekte zu checken. Das habe ich bisher für ein paar Funktionen gemacht, was aber sehr gut funktionierte. So sehen übrigens Testläufe im Backend aus. Das System überprüft hier je nach Vertrauensstufe unterschiedliche Aktionen eines Users und checkt ob das erwartete Ergebnis (erlaubt/verboten) den Erwartungen entspricht. Am Ende wird es tausende solcher Tests geben.

[https://i.imgur.com/ur48n9d.gif]

Anschließend - vermutlich die Woche drauf - würde ich gerne auch im Frontend das Effektsystem dahingehend einbauen, dass User bereits in der UI sehen können, was sie gerade machen können und was nicht (z.B. Thread bekommt ein spezielles Symbol, wenn dieser gerade im "slow down" ist).

Soweit jedenfalls das Update für diese Woche. Ich bin weiterhin guter Dinge, dass das alles auch irgendwann fertig wird. :-)

Greets
Rocco


< antworten >