# User und Rollen

Mit diesen Funktionen personalisierst du Workflows und schützt sensible Aktionen. Du liest Details zum aktuellen Nutzer, prüfst Arbeitsbereich-Rollen, erkennst den Admin-Status und passt das Verhalten an App-, Sprache- und Arbeitsbereichskontext an.

In diesem Kapitel lernst du, wie du:

* Details zum aktuellen Nutzer liest.
* Arbeitsbereich-Rollen vor sensiblen Aktionen prüfst.
* Admin-Nutzer und den Admin-Modus erkennst.
* Skripte an die aktuelle App und Sprache anpasst.
* Arbeitsbereich-, Datenbank- und Tabellenkontext prüfst.

<table><thead><tr><th width="220.94140625">Funktion (A-Z)</th><th>Aufgabe</th></tr></thead><tbody><tr><td><code>clientLang()</code></td><td>Gibt die aktuelle Client-Sprache zurück</td></tr><tr><td><code>isAdminMode()</code></td><td>Prüft, ob die UI im Admin-Modus ist</td></tr><tr><td><code>tableId()</code></td><td>Gibt die interne ID einer Tabelle zurück</td></tr><tr><td><code>user()</code></td><td>Gibt den aktuellen Nutzer zurück</td></tr><tr><td><code>userEmail()</code></td><td>Gibt die E-Mail-Adresse des aktuellen Nutzers zurück</td></tr><tr><td><code>userFirstName()</code></td><td>Gibt den Vornamen des aktuellen Nutzers zurück</td></tr><tr><td><code>userFullName()</code></td><td>Gibt den vollständigen Namen des aktuellen Nutzers zurück</td></tr><tr><td><code>userHasRole()</code></td><td>Prüft, ob der aktuelle Nutzer eine Arbeitsbereich-Rolle hat</td></tr><tr><td><code>userId()</code></td><td>Gibt die ID des aktuellen Nutzers zurück</td></tr><tr><td><code>userIsAdmin()</code></td><td>Prüft, ob der aktuelle Nutzer ein Admin ist</td></tr><tr><td><code>userLastName()</code></td><td>Gibt den Nachnamen des aktuellen Nutzers zurück</td></tr><tr><td><code>userName()</code></td><td>Gibt den Namen des aktuellen Nutzers zurück</td></tr><tr><td><code>userRole()</code></td><td>Gibt die primäre Arbeitsbereich-Rolle des aktuellen Nutzers zurück</td></tr><tr><td><code>userRoles()</code></td><td>Gibt die Arbeitsbereich-Rollen des aktuellen Nutzers zurück</td></tr><tr><td><code>users()</code></td><td>Gibt alle Mitwirkenden im Arbeitsbereich zurück</td></tr></tbody></table>

## Details zum aktuellen Nutzer lesen

Nutze diese Funktionen, wenn du Meldungen personalisieren, Nutzerreferenzen speichern oder anzeigen willst, wer eine Aktion ausgeführt hat.

### Mit `user()` den aktuellen Nutzer holen

Nutze `user()`, wenn du den aktuellen Nutzer brauchst oder einen bestimmten Nutzer im Arbeitsbereich suchen willst.

Nutze es, wenn du:

* direkt auf den aktuellen Nutzer verweisen willst.
* den Nutzer an eine andere Funktion oder einen Vergleich übergeben willst.
* nutzerbezogene Workflow-Logik bauen willst.
* den aktuellen Nutzer mit einem Nutzerfeld vergleichen willst.

`user()`\
`user(string)`

* `string`: der Nutzername, den du suchen willst

`user()` gibt einen Nutzerwert zurück.

Wenn der angegebene Name nicht zu einem Mitglied im Arbeitsbereich passt, gibt `user(string)` keinen Wert zurück.

#### Schauen wir uns einige Beispiele an:

```ninox
user()
```

Gibt den aktuellen Nutzer zurück.

```ninox
user("Jane Doe")
```

Gibt diesen Nutzer zurück, wenn die Person Mitglied im Arbeitsbereich ist. Sonst gibt die Funktion keinen Wert zurück.

```ninox
user() = user("Max Mustermann") or user() = user("Maria Garcia")
```

Gibt `true` zurück, wenn der aktuelle Nutzer einem der beiden Nutzer entspricht.

```ninox
user() = assigned_to
```

Gibt `true` zurück, wenn der aktuelle Nutzer dem Wert im Nutzerfeld `assigned_to` entspricht.

### Identitätsfelder von Nutzern lesen

Nutze diese Funktionen, wenn du einen bestimmten Teil der Identität des aktuellen Nutzers brauchst.

Nutze sie, wenn du:

* eine persönliche Begrüßung anzeigen willst.
* speichern willst, wer eine Aktion ausgelöst hat.
* die E-Mail-Adresse des Nutzers in Freigabe- oder Nachrichten-Workflows verwenden willst.

`userId()` gibt die interne ID des aktuellen Nutzers zurück.\
`userId(user)` gibt die interne ID des Nutzers zurück, der im Feld `user` gespeichert ist.\
`userName()` gibt den Anzeigenamen des aktuellen Nutzers zurück.\
`userName(user_name)` gibt den Anzeigenamen des Nutzers zurück, der im Feld `user_name` gespeichert ist.\
`userEmail()` gibt die E-Mail-Adresse des aktuellen Nutzers zurück.\
`userEmail(user)` gibt die E-Mail-Adresse des Nutzers zurück, der im Feld `User` gespeichert ist.\
`userFirstName()` gibt den Vornamen des aktuellen Nutzers zurück.\
`userFirstName(user)` gibt den Vornamen des Nutzers zurück, der im Feld `user` gespeichert ist.\
`userLastName()` gibt den Nachnamen des aktuellen Nutzers zurück.\
`userLastName(user)` gibt den Nachnamen des Nutzers zurück, der im Feld `user` gespeichert ist.\
`userFullName()` gibt den vollständigen Namen des aktuellen Nutzers zurück.\
`userFullName(user)` gibt den vollständigen Namen des Nutzers zurück, der im Feld `user` gespeichert ist.

#### Schauen wir uns ein Beispiel an:

```ninox
alert("Welcome " + userFullName() + "!")
```

Zeigt eine kurze Begrüßung für den aktuellen Nutzer.

Tipps:

* Nutze `userFullName()` für gut lesbare Bezeichnungen und Meldungen.
* `userName(user)` gibt den Anzeigenamen aus dem Nutzerprofil zurück.
* Nutze `userEmail()`, wenn ein Workflow Dateien teilt oder Benachrichtigungen sendet.
* `userEmail(user)` gibt die E-Mail-Adresse im Arbeitsbereich für den angegebenen Nutzer zurück.
* `userFirstName(user)` nutzt den Vornamen aus dem Profil dieses Nutzers.
* `userLastName(user)` nutzt den Nachnamen aus dem Profil dieses Nutzers.
* `userFullName(user)` kombiniert Vor- und Nachname aus dem Nutzerprofil.
* `userId(user)` gibt die interne alphanumerische ID des angegebenen Nutzers zurück.
* Speichere `userId()`, wenn du eine stabile interne Referenz brauchst.

### Mit `users()` alle Mitwirkenden zurückgeben

Nutze `users()`, wenn du alle Mitwirkenden aus dem aktuellen Arbeitsbereich als Array brauchst.

Nutze es, wenn du:

* alle Nutzer im Arbeitsbereich durchlaufen willst.
* eine Liste mit Namen der Mitwirkenden bauen willst.
* alle Nutzer in Filter- oder Zuweisungslogik wiederverwenden willst.

`users()`

`users()` gibt ein Array von Nutzerwerten zurück.

#### Schauen wir uns ein Beispiel an:

```ninox
users()
```

Gibt alle Mitwirkenden aus dem aktuellen Arbeitsbereich zurück.

Tipps:

* Nutze `users()`, wenn du alle Mitwirkenden brauchst, nicht nur den aktuellen Nutzer.
* Durchlaufe `users()`, wenn du jeden Mitwirkenden einzeln prüfen oder wiederverwenden willst.

## Rollen und Admin-Zugriff prüfen

Nutze diese Funktionen, wenn du Zugriff steuern oder für verschiedene Nutzer unterschiedliches Verhalten zeigen willst.

### Arbeitsbereich-Rollen prüfen

Nutze `userRole()` und `userRoles()`, um die Arbeitsbereich-Rollen des aktuellen Nutzers zu prüfen. Nutze `userHasRole()`, wenn du nur eine direkte Ja-oder-Nein-Prüfung brauchst.

Nutze sie, wenn du:

* den Zugriff auf Admin- oder Manager-Aktionen einschränken willst.
* rollenspezifische Schaltflächen oder Seiten anzeigen willst.
* Exporte, Löschungen oder Freigabe-Workflows absichern willst.

`userRole()`\
`userRole(user)`\
`userRoles()`\
`userRoles(user)`\
`userHasRole(string)`\
`userHasRole(user, string)`

* `string`: der Rollenname, den du mit `userHasRole()` prüfen willst
* `user`: der Nutzer, den du prüfen willst

#### Schauen wir uns einige Beispiele an:

```ninox
userRole()
```

Gibt die erste Arbeitsbereich-Rolle des aktuellen Nutzers zurück, zum Beispiel `admin` oder `editor`.

```ninox
userRole(user)
```

Gibt die erste Arbeitsbereich-Rolle des Nutzers zurück, der im Feld `user` gespeichert ist.

```ninox
userRoles()
```

Gibt alle Arbeitsbereich-Rollen des aktuellen Nutzers zurück.

```ninox
userRoles(user)
```

Gibt alle Arbeitsbereich-Rollen des Nutzers zurück, der im Feld `user` gespeichert ist.

```ninox
if userHasRole("Manager") then "OK" else "No access" end
```

Prüft, ob der aktuelle Nutzer die Arbeitsbereich-Rolle `Manager` hat.

```ninox
userHasRole(created_by, "admin")
```

Prüft, ob der Nutzer im Feld `Created_by` die Arbeitsbereich-Rolle `admin` hat.

Tipps:

* `userRole()` gibt nur die erste Rolle eines Nutzers zurück.
* `userRoles()` gibt eine Liste von Rollennamen zurück.
* Nutze `userRoles()`, wenn du alle zugewiesenen Rollen prüfen willst.
* Nutze `userHasRole()` für Berechtigungsprüfungen in Schaltflächen und Skripten.
* Prüfe den Zugriff früh, damit eingeschränkte Aktionen sofort stoppen.

### Admin-Status prüfen

Nutze `userIsAdmin()`, um zu prüfen, ob der aktuelle Nutzer Admin-Rechte hat. Nutze `isAdminMode()`, um zu prüfen, ob die Oberfläche gerade im Admin-Modus läuft.

Nutze sie, wenn du:

* sensible Wartungsaktionen absichern willst.
* Seiten oder Bedienelemente nur für Admins anzeigen willst.
* die UI an den aktuellen Admin-Kontext anpassen willst.

`userIsAdmin()` gibt einen booleschen Wert zurück.\
`isAdminMode()` gibt einen booleschen Wert zurück.

#### Schauen wir uns einige Beispiele an:

```ninox
userIsAdmin()
```

Gibt `true` zurück, wenn der aktuelle Nutzer Admin-Rechte hat.

```ninox
isAdminMode()
```

Gibt `true` zurück, wenn der Builder-Modus aktiv ist.

```ninox
if not userIsAdmin() then alert("Admins only.") else openPage("Admin") end
```

Zeigt eine kurze Warnung für Nicht-Admins und öffnet die Admin-Seite für Admins.

{% hint style="info" %}
Kombiniere Rollenprüfungen mit `dialog()` vor sensiblen Aktionen wie Löschen, Exporten oder Sammelaktualisierungen.
{% endhint %}

## Skripte an App-, Sprache- und Arbeitsbereichskontext anpassen

Nutze diese Funktionen, wenn sich dein Skript je nach Sprache oder aktueller Umgebung anders verhalten soll.

### Mit `clientLang()` die aktuelle Sprache erkennen

Nutze `clientLang()`, um die aktuell im Browser oder in der App gesetzte Sprache zu lesen.

Nutze es, wenn du:

* Meldungen lokalisieren willst.
* Bezeichnungen je nach Sprache wechseln willst.
* unterschiedlichen Nutzern unterschiedliche Texte zeigen willst.

`clientLang()`

`clientLang()` gibt einen String wie `en`, `de` oder `es` zurück.

#### Schauen wir uns einige Beispiele an:

```ninox
if clientLang() = "es" then "Hola" else "Hello" end
```

Gibt `Hola` zurück, wenn die Client-Sprache auf Spanisch gesetzt ist.

Tipps:

* `clientLang()` spiegelt die Sprache im aktuellen Browser oder in der App wider.
* Nutzer können auf verschiedenen Clients unterschiedliche Sprachen nutzen.
* Halte lokalisierte Meldungen kurz.
* Teste sprachabhängige Skripte mit echten Client-Sprach-Einstellungen.

### Mit `tableId()` Arbeitsbereich und Struktur prüfen

Nutze diese Funktion, wenn du interne Kennungen für Protokolle, Diagnose, Integrationen oder umgebungsabhängige Logik brauchst.

Nutze sie, wenn du:

* protokollieren willst, wo ein Skript läuft.
* API-Anfragen bauen willst.

\
`tableId(record)`\
`tableId(string)`

* `record`: ein Datensatz aus der Tabelle
* `string`: der Tabellenname

#### Schauen wir uns einige Beispiele an:

```ninox
tableId(this)
```

Gibt die interne ID der aktuellen Tabelle zurück.

```ninox
tableId("Invoices")
```

Gibt die interne ID der Tabelle `Invoices` zurück, zum Beispiel `B`.

Tipps:

* Nutze `tableId()` in API-Calls, wenn du die interne Tabellen-ID brauchst.
* Verwende sie nicht in Bezeichnungen oder Meldungen, außer ein technischer Workflow braucht sie.

## Häufige Muster für Nutzer und Rollen

Diese kurzen Muster zeigen typische Wege, Workflows in Ninox zu personalisieren und zu schützen.

### Zugriff auf Admins beschränken

```ninox
if not userIsAdmin() then alert("Admins only.") else openPage("Admin") end
```

Blockiert Nicht-Admins und führt Admins in den Admin-Bereich.

### Zugriff per Rolle beschränken

```ninox
if userHasRole("Manager") then "OK" else "No access" end
```

Prüft, ob der aktuelle Nutzer die Arbeitsbereich-Rolle `Manager` hat.

### Eine kurze Meldung lokalisieren

```ninox
if clientLang() = "de" then "Willkommen" else "Welcome" end
```

Gibt eine kurze Begrüßung abhängig von der aktuellen Client-Sprache zurück.

Nutze dieses Kapitel zusammen mit Navigations- und Dateifunktionen:

* Nutze Rollenprüfungen vor Exporten, Löschungen oder Seitenwechseln.
* Nutze Nutzerdetails, um Alerts, Protokolle und geteilte Inhalte zu personalisieren.
* Nutze App- und Sprachprüfungen, wenn Verhalten von der Client-Umgebung abhängt.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ninox.com/ninox-scripting/de/automate-your-workflows/work-with-functions/users-and-roles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
