= users()
:description: Gibt alle Benutzerkonten des Servers zurück (mng.GetUserList). Mit extended_info=True werden zusätzlich Gruppen und Attribute je Benutzer geladen.
:keywords: users, mng.GetUserList, Benutzerkonten, extended_info, ECMUser
:page-tags: api, security

Gibt alle auf dem Server bekannten Benutzerkonten zurück.
Mit `extended_info=True` werden zusätzliche Felder je Benutzer befüllt.

== Signatur

[tabs]
====
Sync::
+
[source,python]
----
ecm.security.users(*, extended_info: bool = False) -> list[ECMUser]
----

Async::
+
[source,python]
----
await ecm.security.users(*, extended_info: bool = False) -> list[ECMUser]
----
====

== Parameter

[cols="1,1,3"]
|===
|Parameter |Standard |Beschreibung

|`extended_info`
|`False`
|Bei `True` werden zusätzlich `groups`, `remark`, `valid_from` und `valid_to`
je Benutzer vom Server abgerufen und befüllt.
|===

== Rückgabewert

Liste von `ECMUser`-Instanzen, eine pro Benutzerkonto.

=== ECMUser-Felder

[cols="1,1,3"]
|===
|Feld |Typ |Beschreibung

|`id`
|`int`
|Numerische Benutzer-ID.

|`username`
|`str`
|Kurzer interner Benutzername.

|`login_name`
|`str`
|Anmeldename für die Authentifizierung.

|`display_name`
|`str`
|Vollständiger Anzeigename.

|`email`
|`str`
|E-Mail-Adresse.

|`guid`
|`str`
|Globally Unique Identifier des Benutzerkontos.

|`profile_id`
|`int`
|Profil-ID: `-1` = kein Profil, `0` = Benutzerprofil, `>0` = zugewiesenes Profil.

|`locked`
|`bool`
|`True` wenn das Konto gesperrt ist.

|`remark`
|`str`
|Bemerkung aus der Benutzerkonfiguration. Nur mit `extended_info=True` befüllt.

|`valid_from`
|`datetime \| None`
|Gültig-ab-Datum. Nur mit `extended_info=True` befüllt.

|`valid_to`
|`datetime \| None`
|Gültig-bis-Datum. Nur mit `extended_info=True` befüllt.

|`groups`
|`list[str]`
|Namen der Gruppen, denen der Benutzer angehört. Nur mit `extended_info=True` befüllt.
|===

== Beispiele

=== Alle Benutzer auflisten

[tabs]
====
Sync::
+
[source,python]
----
users = ecm.security.users()
for user in users:
    print(user.username, user.display_name, user.email)
    if user.locked:
        print(f"  → gesperrt")
----

Async::
+
[source,python]
----
users = await ecm.security.users()
for user in users:
    print(user.username, user.display_name, user.email)
----
====

=== Mit Gruppeninformationen

[tabs]
====
Sync::
+
[source,python]
----
users = ecm.security.users(extended_info=True)
for user in users:
    print(user.username, user.groups)
----

Async::
+
[source,python]
----
users = await ecm.security.users(extended_info=True)
for user in users:
    print(user.username, user.groups)
----
====

=== Gesperrte Konten finden

[tabs]
====
Sync::
+
[source,python]
----
locked = [u for u in ecm.security.users() if u.locked]
print(f"{len(locked)} gesperrte Konten")
----

Async::
+
[source,python]
----
locked = [u for u in await ecm.security.users() if u.locked]
print(f"{len(locked)} gesperrte Konten")
----
====

== Siehe auch

* xref:api/security/user.adoc[user()] — Detaillierte Attribute eines einzelnen Benutzers
* xref:api/security/user_groups.adoc[user_groups()] — Gruppen eines bestimmten Benutzers abrufen
