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 True


Und 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: vorstand

Es können alternativ auch mehrere Gruppen angegeben werden, z.B.

path: ehrenamtliche
emoji: 🟦🟧
groups:
  - vorstand
  - redaktion