Authentik: Einladungslinks mit Gruppenzuordnung
Um Einladungslinks zu erstellen, bei denen nach der Registrierung automatisch bestimme Gruppen und ein Userpath hinterlegt ist, sowie den Anzeigenamen von User*innen Emojis anzuhängen (um sie z.B. in Element visuell leicht unterscheidbar zu machen) braucht es einen Invitation-Flow mit einer Richtlinie in der Write-Stage.
In dieser “Expression Policy” braucht es folgenden Code:
from authentik.core.models import Group
prompt = request.context.get("prompt_data", {}) or {}
name = prompt.get("name")
emoji = prompt.get("emoji")
# Gruppen aus 'groups' (Liste) oder 'group' (Einzelwert) auslesen
invite_groups = prompt.get("groups", [])
single_group = prompt.get("group")
path = prompt.get("path")
if single_group and not invite_groups:
invite_groups = [single_group]
elif single_group and isinstance(invite_groups, list):
if single_group not in invite_groups:
invite_groups.append(single_group)
# 1. Emoji an Name anhängen
if name and emoji:
name = str(name)
if not name.endswith(emoji):
prompt["name"] = f"{name} {emoji}"
request.context["prompt_data"] = prompt
if "flow_plan" in request.context and hasattr(request.context["flow_plan"], "context"):
request.context["flow_plan"].context.setdefault("prompt_data", {}).update(prompt)
pending = request.context.get("pending_user")
if pending and getattr(pending, "name", None) and emoji:
if not pending.name.endswith(emoji):
pending.name = f"{pending.name} {emoji}"
# 2. Gruppen verarbeiten
if invite_groups:
group_objects = []
for g_name in invite_groups:
target_group = Group.objects.filter(name=g_name).first()
if target_group:
group_objects.append(target_group)
request.context["flow_plan"].context["groups"] = group_objects
# 3. User Path (path) verarbeiten
if path:
request.context["flow_plan"].context["user_path"] = str(path)
return TrueUnd damit ist es nun möglich bei den Invitation-Links folgende Attribute zu setzen:
Benutzerdefinierte Attribute: Hier können Gruppen definiert werden, in die der die sich neu anmeldende Person automatisch sortiert wird (und auch die entsprechende Rechte bekommt), außerdem der Pfad für die User*innen-Übersicht (hat keine Auswirkungen auf die Rechtevergabe, dient nur der Übersicht), sowie ein Emoji, das dem Anzeigenamen angehängt werden soll – und damit die Person in Element erkennbar macht.
Und zwar so:
path: ehrenamtliche
emoji: 🟦
group: vorstandEs können alternativ auch mehrere Gruppen angegeben werden, z.B.
path: ehrenamtliche
emoji: 🟦🟧
groups:
- vorstand
- redaktion