# Nutzerverwaltung

Nutzerkonten-Verwaltung, Rollen-Rechte, Authentifizierung, user-lifecycle, Einschreibemethoden

# Authentifizierung

# Matrikelnummer mit Shibboleth übertragen

Wird z.B. `schacPersonalUniqueCode` vom IdentityProvider als SCHAC-Attribut übertragen, kann man den Wert via `Transform` auf ServiceProvider-Seite für Moodle nutzbar extrahieren:

```
  <AttributeResolver type="Transform" source="schacPersonalUniqueCode">
    <Regex match="^urn:mace:terena\.org:schac:personalUniqueCode:de:beispieldomain\.de:Matrikelnummer:(.+)$" dest="matnum">$1</Regex>
  </AttributeResolver> 
```

"The Schema for Academia, SCHAC, aims to define and promote common schemas in the field of higher education to facilitate inter-institutional data exchange."

[https://wiki.refeds.org/display/STAN/SCHAC+Releases](https://wiki.refeds.org/display/STAN/SCHAC+Releases "https://wiki.refeds.org/display/STAN/SCHAC+Releases")

Die genaue Regexp im `Transform`-AttributeResolver hängt davon, wie das Attribut formatiert ist.

Der `AttributeResolver` ist ein Unterelement der `ApplicationDefaults` in der `shibboleth2.xml` des Service Providers.

<div class="footnotes" id="bkmrk-quelle%3A-thorsten-bar"><div class="fn">Quelle: Thorsten Bartel (Ruhr-Universität Bochum) via #Moodle-D-A-CH:matrix.org am 11.02.2025</div></div>

# Rollen und Rechte

In Rollen sind die Berechtigungen (capabilities) definiert. Diese können auf verschiedenen Ebenen vergeben werden.

Es ist zu unterscheiden zwischen globalen zugeordneten Rollen im kompletten Moodle-System ("Rollen zuweisen in System": `/admin/roles/assign.php?contextid=1`), wie z.B. admins oder Support, und kursspezifischen Rollen, wie z.B. Lehrende.

Die verfügbaren Rollen im System und deren Rechte ([Capabilities](https://docs.moodle.org/de/Rechte)) werden unter `/admin/roles/manage.php` definiert. Dort wird auch gesteuert, welche Rollenzuweisungen, -änderungen, -wechsel und -ansicht jeweils erlaubt sind.

## Ausführliche Dokumentation in den Moodle Docs

[Docs: Rollen und Rechte](https://docs.moodle.org/de/Rollen_und_Rechte)

---

Autor: Klaus Steitz, Technische Universität Darmstadt

# Nutzerlisten-Import

*Mit Import-Listen können Nutzer/innen neu erstellt oder in Kurse und Gruppen hinzugefügt werden.*

*Website-Administration &gt; Nutzer/innen &gt; Nutzerkonten &gt; Nutzerliste hochladen* ermöglicht, Nutzer/innen in einen oder mehrere Kurse mit unterschiedlichen [Rollen](https://kb.moodle-an-hochschulen.de//books/nutzerverwaltung/page/rollen-und-rechte "Rollen und Rechte") oder Gruppen einzuschreiben, das Aktualisieren von Daten im [Nutzerprofil](https://docs.moodle.org/de/Nutzerprofil "Nutzerprofil (Moodle Docs)") oder das Erstellen, Deaktivieren und [Löschen von Nutzerkonten](https://docs.moodle.org/de/Nutzerliste_hochladen#Nutzerkonten_l%C3%B6schen "Löschen von Nutzerkonten") (via Spalte "deleted").

Die Nutzerliste wird in Form einer *Comma-separated values-*Datei (CSV-Datei) hochgeladen. Diese Tabelle kann mit Excel/Calc erstellt werden und muss mindestens die folgenden Spalten enthalten:

<table cellspacing="0" class="ms-rteTable-default" id="bkmrk-username-firstname-l" width="100%"><tbody><tr><td class="ms-rteTable-default" style="width: 25%;">username</td><td class="ms-rteTable-default" style="width: 25%;">firstname</td><td class="ms-rteTable-default" style="width: 25%;">lastname</td><td class="ms-rteTable-default" style="width: 25%;">email</td></tr></tbody></table>

Der Zeichensatz, mit dem Excel die Datei speichert, kann zu Problemen führen (v.a. bei Umlauten); daher die CSV-Datei am besten mit Notepad++ öffnen und ggf. die Zeichen auf Windows-1252 konvertieren – Einstellung in Notepad++ unter *Encoding* -&gt; *Character sets* -&gt; *Western European* -&gt; *Windows-1252*

Für manuelle Accounts: Der Benutzername darf nur Kleinbuchstaben, Ziffern, das Minuszeichen '-', einen Unterstrich '\_', einen Punkt '.' oder das '@'-Zeichen enthalten.

## Liste aus bereits vorhandenen usern erstellen  


Via ["Nutzerverwaltung (Bulk)"](https://docs.moodle.org/de/Nutzerverwaltung_%28Bulk%29 "Nutzerverwaltung (Bulk) (Moodle Docs)") können gewünschte Filter gesetzt und danach eine Liste exportiert werden. Dies ergibt eine korrekt formatierte Tabelle mit allen nötigen Daten.

## Import vorhandener user in einen Kurs

Hier beispielhaft die Schritt-für-Schritt Vorgehensweise zum Hinzufügen bereits im System vorhandener user zu einem Kurs als Teilnehmende; hier werden neue user in den Rollen Lehrende und Assistenz in den Kurs "Lehrenden-Community" hinzugefügt:

1. Unter *Website-Administration &gt; Nutzer/innen &gt; Nutzerkonten &gt; Nutzerverwaltung (Bulk)* auf *"Mehr anzeigen ..."* klicken
2. *"Kurs-Rolle"* auf *"Lehrende"* setzen und Button *"Filter Hinzufügen"* klicken
3. *"Mehr anzeigen ..."* klicken, "*Erster Zugriff ist nach"* auf einen Tag vorm letzten Import (s.u.) setzen und Button *"Filter Hinzufügen"* klicken
4. Button *"Alle Hinzufügen"* klicken rechts von "Auswahl bearbeiten"
5. Checkbox vor *"Kurs-Rolle ist "Lehrende""* setzen und Button *"Ausgewählte Suche beenden"* klicken
6. *"Mehr anzeigen ..."* klicken, *"Kurs-Rolle"* auf *"Assistenz"* setzen und Button *"Filter Hinzufügen"* klicken
7. Button *"Alle Hinzufügen"* klicken --&gt; user der Rollen Lehrende und Assistenz werden addiert und dabei Duplikate durch Doppelrollen vermieden
8. Ganz unten "Für ausgewählte Nutzer/innen … " klicken und *"Download"* auswählen --&gt; *.xlsx* auswählen und *Button "Herunterladen"*
9. Nutzerinnen.xlsx öffnen und alle Spalten bis auf folgende 5 löschen: <table border="0" cellpadding="0" cellspacing="0" style="width: 330pt; border-collapse: collapse;" width="440"><colgroup> <col span="5" style="width: 66pt;" width="88"></col> </colgroup><tbody><tr style="height: 15.75pt;"><td height="21" style="width: 66pt; height: 15.75pt;" width="88">username</td><td style="width: 66pt;" width="88">email</td><td style="width: 66pt;" width="88">firstname</td><td style="width: 66pt;" width="88">lastname</td><td style="width: 66pt;" width="88">course1  
    </td></tr></tbody></table>
10. Für alle Zeilen der neue hinzugefügten Spalte "course1" diesen Wert setzen: *Lehrenden-Community*
11. Als CSV (Trennzeichen-getrennt) speichern
12. Mit Notepad++ öffnen und prüfen, dass keine falschen oder leeren Spalten mit ",," enthalten sind + ggf. Coding auf Windows-1252 umstellen, falls Umlautprobleme auftauchen (s.o.)
13. Die csv-Datei hochladen unter *Website-Administration &gt; Nutzer/innen &gt; Nutzerkonten &gt; Nutzerliste hochladen* und *"Vorschau für Zeilen"* auf *1000* stellen sowie *"Encoding"* auf *"Windows-1252"*
14. Vorschau prüfen und unter Einstellungen *"Upload Typ"* auf *"Nur vorhandene aktualisieren"* und die anderen Werte auf *"Nein"* setzen
15. Button *"Nutzerliste hochladen"* und Ausgabe überprüfen.

## Ausführliche Dokumentation in den Moodle Docs

[https://docs.moodle.org/de/Nutzerliste\_hochladen](https://docs.moodle.org/de/Nutzerliste_hochladen)

---

Autor: Klaus Steitz, Technische Universität Darmstadt

# user-lifecycle

Hier geht es um Aufräumstrategien für Accounts mit einer Übersicht von User-Lifecycle-Plugins.

User-Konten werden nicht automtisch aufgeräumt, wodurch sich über die Zeit viele inaktive Konten von Usern, die nicht mehr Hochschulangehörige sind, ansammeln können. Zum Aufräumen dieser Accounts nach bestimmten Regeln gibt es verschiedene Plugins, die z.B. prüfen, ob User noch im LDAP sind.

Hier ein grober Überblick von User-Lifecycle-Plugins:

## User Suspension (tool\_usersuspension)

[https://moodle.org/plugins/tool\_usersuspension](https://moodle.org/plugins/tool_usersuspension)

## Inactive User Cleanup (tool\_inactive\_user\_cleanup)

[https://moodle.org/plugins/tool\_inactive\_user\_cleanup](https://moodle.org/plugins/tool_inactive_user_cleanup)

Es wird ein <span style="text-decoration: underline;">Scheduled Task </span>erstellt, der 1x tgl. läuft und folgendes prüft:

- **Days of inactivit**y: Zeit seitdem sich der User das letzte Mal eingeloggt hat (`lastaccess`) → wenn zutreffend wird 
    - eine E-Mail verschickt und
    - der User in eine Tabelle eingetragen
- **Days before deletion**: Zeit zwischen Versenden der Mail und dem tatsächlichen Löschen

**Pro:**

- E-Mail über bevorstehende Löschung wird an User verschickt.

**Contra:**

- Fehlerhafte Programmierung an manchen Stellen (z.B. [https://github.com/dualcube/moodle-tool\_inactive\_user\_cleanup/issues/32](http://PHP%20Error) - noch nicht gefixt!)
- Programmierung etwas hacky (z.B. wird E-Mail an User in einer `if`-Bedingung verschickt )
- Keine Möglichkeit, bestimmte User auszuschließen

## Hard life cycle for self-signup users (tool\_selfsignuphardlifecycle)

[https://moodle.org/plugins/tool\_selfsignuphardlifecycle](https://moodle.org/plugins/tool_selfsignuphardlifecycle)

## LDAP server Sync Plus (auth\_ldap\_syncplus)

[https://moodle.org/plugins/auth\_ldap\_syncplus](https://moodle.org/plugins/auth_ldap_syncplus)

## Automatic User Deletion (tool\_userautodelete)

[https://github.com/ngandrass/moodle-tool\_userautodelete](https://github.com/ngandrass/moodle-tool_userautodelete)

**Features:**

- Automatische Löschung inaktiver Benutzerkonten
- Warn-E-Mails an Benutzer vor der Löschung
- DSGVO-konforme Löschung von Benutzerkonten
- Ignorieren von Benutzern mit bestimmten Rollen
- Ignorieren bestimmter Authentifizierungs-Plugins
- Testlaufmodus für die Konfiguration
- Hochgradig konfigurierbar (Lösch- und Warnschwellenwerte, E-Mail-Vorlagen, Aktivierung/Deaktivierung einzelner Funktionen usw.)
- Protokollierung von Löschvorgängen
- Automatisierte Tests und Unterstützung für alle aktiven Moodle-Versionen

**Pro:**

- Rollen und Auth-Methoden können ausgenommen werden
- E-Mail über bevorstehende Löschung wird an User verschickt
- Eintrag in Tabelle `user` wird anonymisiert
- Dry-run möglich
- Logging-Seite

**Contra:**

- Zweistufiger Prozess fehlt: zuerst Suspension, dann Löschung
- Nur eine E-Mail zur Warnung wird verschickt

## cleanupusers (tool\_cleanupusers)

[https://github.com/eLearning-TUDarmstadt/moodle-tool\_cleanupusers](https://github.com/eLearning-TUDarmstadt/moodle-tool_cleanupusers)

**Features:**

- "**Archiving**": die Nutzerdaten werden in einer Schatten-Tabelle gespeichert, so dass die Nutzerdaten bei Bedarf wiederhergestellt werden können (Tabelle `tool_cleanupusers_archive`).
- **Löschen** von Nutzeraccounts.
- **Reaktivieren** von Nutzern, wenn sie sich wieder eingeloggt haben, nachdem sie zum Löschen vorgemerkt wurden.
- **Manuelles Löschen** über eine Admin-Seite: `Site administration ► Users ► Clean up users ► General settings`
- **Automatisches Löschen** über einen Geplanten Task (daily scheduled task).
- **Suplugins**: das Plugin braucht mindestens ein Subplugin, das die Nutzeraccounts zurückgibt, die vom Task verarbeitet werden. Standardmäßig mitgeliefert wird das *timechecker* Subplugin, welches den letzten Zugriff eines Nutzers in Moodle prüft (*lastaccess*). Ebenfalls veröffentlicht ist ein LDAP-Checker Subplugin.

**Pro:**

- Speichert zu löschende User in einer Schatten-Tabelle
- Anonymisiert gelöschte User in der `user` Tabelle
- Eigene Subplugins möglich, z.B. [um bestimmte User auszuschließen](https://github.com/eLearning-TUDarmstadt/moodle-tool_cleanupusers/issues/31)

**Contra:**

- [Nur ein Subplugin möglich](https://github.com/eLearning-TUDarmstadt/moodle-tool_cleanupusers/issues/30)
- Es werden keine E-Mails an die User verschickt: [https://github.com/eLearning-TUDarmstadt/moodle-tool\_cleanupusers/issues/29](https://github.com/eLearning-TUDarmstadt/moodle-tool_cleanupusers/issues/29)
- Offene Pull Requests: [https://github.com/eLearning-TUDarmstadt/moodle-tool\_cleanupusers/pulls](https://github.com/eLearning-TUDarmstadt/moodle-tool_cleanupusers/pulls)

---

Autor\*innen: [Klaus Steitz](https://forum.moodle-an-hochschulen.de/user/view.php?id=44 "Profil im Vereins-Moodle") (TU Darmstadt), [Melanie Treitinger](https://forum.moodle-an-hochschulen.de/user/view.php?id=35 "Profil im Vereins-Moodle") (Ruhr-Uni Bochum)