Hinweis: Sie sind auf den Seiten der Moodle 1.9 Dokumentation. Die Dokumentation der aktuellsten Moodle-Version finden Sie hier: Das Skript rolesdebug.php.

Das Skript rolesdebug.php

Aus MoodleDocs
Wechseln zu:Navigation, Suche

Moodle1.9

Das Skript rolesdebug.php ist ein eigenständiges PHP-Skript, das sehr nützlich für das Debuggen von Problemen im Zusammenhang mit Rollen und Rechten ist. Die Ausgabe des Skripts kann von jedem mit guten Kenntnissen über das Rollen- und Rechtesystem System interpretiert werden. Sollten Sie ein "Rollen-Neuling" sein und Hilfe im Zusammenhang mit Rollen und Rechten benötigen, bitten Sie einen Rollen-Experten, Ihnen bei der Ausführung und Interpretation des Skripts zu helfen. Wenn Ihnen kein Rollen-Experte zur Verfügung steht, posten Sie einen Hilferuf im Roles and Capabilities forum im Kurs "Using Moodle" auf moodle.org. Wenn Sie das Skript ein paar Mal benutzt haben, sind auch Sie sicher bald ein Experte!

Sie können das Skript rolesdebug.php aus der Modules and Plugins Datenbank herunterladen. Zur Installation des Skripts speichern Sie es einfach im Moodle-Hauptverzeichnis (dort wo alle PHP-Skripte von Moodle gespeichert sind) oder in einem beliebigen Unterverzeichnis des Moodle-Hauptverzeichnis.

Das Skript rolesdebug.php erfordert eine Anmeldung. Es kann also nur ein angemeldeter Moodle-Nutzer das Skript benutzen. Da es sich um ein PHP-Skript handelt, sehen Sie die Ausgabe in Ihrem Browser. Es kann nur von Ihnen eingesehen werden, es sei denn, es schaut Ihnen jemand über die Schulter ;-). Außerdem gibt rolesdebug.php Ihnen nur Informationen über IHRE Rechte. Sie können es also nicht verwenden, um sich über die Rechte eines anderen Nutzers zu informieren (es sei denn, Sie können sich als diese Person einloggen.)

Das Skript rolesdebug.php gibt eine Tabelle mit einer Übersicht über die Rollenzuweisungen und Änderungen von Zugriffsrechten, die Sie in einem angegebenen Kontext betreffen, aus. Anhand dieser Tabelle können Sie sehen, wie Moodle ein Recht für eine gegebene Fähigkeit berechnet. Das Format der Tabelle wird mit vielen Beispielen im Artikel Wie Rechte berechnet werden erläutert.

Das Skript rolesdebug.php liest Rechte-Daten aus der Moodle-Datenbank aus, verändert sie aber in keiner Weise. In dieser Hinsicht ist das Skript vergleichbar mit anderen Debug-Skripts der Moodle-Standardinstallation, wie z.B. der TeX-Debugger.

Wann verwenden Sie das Skript rolesdebug.php?

Ein typische Anwendungsfall ist eine Situation, in der ein "Rollen-Experte" einem "Rollen-Neuling" bei der Lösung eines rollenspezifischen Problems hilft. Ein "Rollen-Experte" ist ein Moodle-Nutzer, der ein gutes Verständnis der im nächsten Abschnitt aufgelisteten grundlegenden Begriffe hat. Ein "Rollen-Neuling" ist ein Moodle-Nutzer, der einfache Anweisungen des "Rollen-Experten" befolgen kann. Während es durchaus vorkommen kann, dass Experte und Neuling sich am gleichen Ort befinden und Nutzerkonten auf der gleichen Moodle-Installation haben, ist das nicht zwingend notwendig. Der Experte müsste dem Neuling helfen können, ohne sich auf der Moodle-Installation des Neulings einzuloggen, indem er mit dem Neuling nur über E-Mail, Messaging oder Forumsbeiträge kommuniziert. Der Neuling könnte z.B ein Nutzer sein, der in einem Forum auf moodle.org gepostet hat, während der Experte ein Moodler ist, der gerne helfen möchte. Sogar wenn Experte und Neuling sich in der gleichen Institution befinden und beide Nutzerkonten auf der gleichen Moodle-Installation haben, kann es sein, dass der Experte nicht in der Lage ist, direkt zu helfen (z.B. indem er sich als der Neuling anmeldet oder sich mit ihm trifft - der Experte könnte z.B. ein sehr eingespannter Moodle-Administrator sein). Auch in diesem Fall hilft das Skript rolesdebug.php.

Hier ist ein typisches Szenario: Angenommen der Neuling ist ein Trainer, der eine Lernaktivität Test angelegt hat, aber aus unbekannten Gründen nicht in der Lage ist, sich die Vorschau des Tests anzusehen. Der Neuling berichtet über sein Problem in einem Forumsbeitrag auf moodle.org. Der Experte (ein hilfsbereiter Moodler ;-)) geht von einem rollenspezifischen Problem aus und bittet den Neuling folgendes zu tun:

  • sich in Moodle einzuloggen, um das Problem zu reproduzieren
  • das Skript rolesdebug.php aufzurufen
  • zwei oder drei Parameter nach Anweisung einzugeben
  • die Ausgabe von rolesdebug.php in einem Forumsbeitrag zu posten. Der Experte sieht sich die Ausgabe an und erkennt sofort das Problem.

Andere Fälle für den Einsatz des Skripts rolesdebug.php sind u.a.:

  • ein Nutzer, der sein eigenes Problem analysiert und löst
  • ein Nutzer, der das Problem eines anderen Nutzers löst, während er als dieser Nutzer eingeloggt ist

Bitte beachten Sie, dass beide Fälle äquivalent sind, da es in beiden Fällen nur einen Akteur gibt (den Experten). Der Einfachheit halber beschreibt der Artikels im folgenden nur diesen Fall und bezieht sich immer auf SIE. Unter Berücksichtigung des Hauptanwendungsfalls sollte eigentlich immer klar sein, wann "Sie" den Experten und wann den Neuling meint.

Grundlegende Begriffe

Die Interpretation der Ausgabe des Skripts rolesdebug.php ist nur mit einem guten Verständnis der unten stehenden Begriffe möglich. Wenn Ihnen einer der Begriffe unklar ist, sollten Sie sich den entsprechenden Artikel durchlesen.

Überblick über die Anwendung des Skripts

Als erstes loggen Sie sich auf Moodle ein und navigieren zu dem Kontext, der Probleme bereitet. Das könnte ein Test sein, den Moodle Sie aus irgendeinem Grund nicht durchführen lässt. Dann gehen Sie, ohne sich auszuloggen, auf die Seite rolesdebug.php (es bietet sich an, dafür einen neuen Browsertab zu verwenden). Geben Sie den relevanten Kontext ein und optional auch den Namen der Fähigkeit, die Sie analysieren möchten. Dann klicken Sie auf den Button Go. Das Skript gibt dann eine Tabelle mit einer Übersicht der Rollenzuweisungen und -überschreibungen aus, die Sie im angegebenen Kontext betreffen. Anhand dieser Tabelle können Sie sehen, warum Moodle Sie den Test nicht durchführen lässt.

Detaillierte Anleitung zur Verwendung des Skripts

Schritt 1

Dieser Schritt erfolgt in Moodle (das Skript selbst wird erst in Schritt 2 verwendet). Loggen Sie sich in Moodle ein und navigieren Sie zu dem Kontext, in dem das Problem auftritt. Dort angekommen, notieren Sie sich die Kontext-ID (diese wird in Schritt 2 benötigt). Wie man die Kontext-ID feststellt, wird später erklärt.

Hinweis: Es ist notwendig, in den Kontext zu navigieren, auch wenn Sie die Kontext-ID schon kennen. Das liegt daran, dass Moodle einige Rechte-Daten erst dann lädt, wenn sie tatsächlich gebraucht werden. Das Navigieren in den jeweiligen Kontext stellt sicher, dass Moodle diese Daten lädt. Wenn also der Zielkontext ein bestimmter Test in einem Kurs ist, dann müssen Sie in diesen Kurs gehen und auf das Test-Icon klicken.

Falls Sie jedoch ein Problem beheben wollen, das mit einer Veränderung der Nutzerpolicy (Nutzereigenschaften) zu tun hat, wie z.B. Website-Administration > Startseite > Einstellungen > Standardrolle für Startseite, müssen Sie sich nach Veränderung der Einstellung zunächst ausloggen und wieder einloggen.

Loggen Sie sich nicht wieder aus!

Schritt 2

Öffnen Sie ein neues Browser-Fenster. Geben Sie in diesem Fenster die URL des Skripts rolesdebug.php ein. Die Skript-URL müsste ungefähr so aussehen:

http://ihreseite/moodle/rolesdebug.php 

Das Skript wird nicht nach einem Login fragen, da Sie bereits eingeloggt sind. Sie werden gebeten, drei Eingaben zu machen:

  • capability (Fähigkeit). Falls Sie nur Ihre Rollenzuweisungen und -änderungen sehen wollen, können Sie dieses Feld leer lassen. Falls Sie ein bestimmtes Recht analysieren möchten, müssen Sie hier den Namen der entsprechenden Fähigkeit eingeben. Wenn Sie also z.B. an der Fähigkeit interessiert sind, die steuert, wie und ob Sie an einem Test teilnehmen können, geben Sie mod/quiz:attempt ein.
  • context type. Wählen Sie eine der folgenden Angaben aus dem Auswahlmenü:
    • System
    • User (Nutzer)
    • Course category (Kursbereich)
    • Course (Kurs)
    • Module (Modul)
    • Block
  • context id. Die Kontext-ID ist eine Nummer am Ende der URL der Seite, die Sie in Schritt 1 gefunden haben. Siehe Wie man die Kontext-ID feststellt weiter unten.

Mit Modul ist entweder eine Lernaktivität oder ein Arbeitsmaterial gemeint. Es gibt keinen Site-Kontext (Kontext der Startseite). Wenn Sie sich auf den Kontext der Startseite beziehen möchten, wählen Sie course (Kurs) und die Kontext-ID 1.

Beispiel für eine Eingabe:

sample input quiz attempt.png

Schritt 3

Klicken Sie auf go. Das Skript rolesdebug.php gibt dann eine Informationsseite aus. Diese enthält im Wesentlichen eine Tabelle mit der Übersicht aller Rollenzuweisungen und -änderungen, die Sie im angegebenen Kontext betreffen.

Wie man die Ausgabe des Skripts liest

Hier sehen Sie eine typische Ausgabe für das Beispiel aus Schritt 2.

sample output quiz attempt.png

Die ersten drei Zeilen der Ausgabe (1) wiederholen zunächst nur Ihre Eingabewerte, die nächsten zwei Zeilen (2) zeigen, wer SIE sind und geben den Namen des Kontexts an, den Sie gewählt haben. Überprüfen Sie diese Zeilen, um sicher zu gehen, dass Sie der sind, der Sie glauben zu sein und dass Sie den richtigen Kontext angegeben haben. Für jede Ihrer Rollen sehen Sie eine Zeile in der Form alias = role name, wobei role name der tatsächliche Rollenname und alias das Kürzel ist, das in der Tabelle verwendet wird, um sich auf die Rolle zu beziehen. Im Beispiel bedeutet R7 = user, dass die Rolle User (die Kurzform für Authentifizierte/r Nutzer/in) in der Tabelle durch das Kürzel R7 repräsentiert wird. Die Kürzel werden verwendet, da sonst die Tabelle wegen der langen Rollenbezeichnungen sehr breit wäre. Dann kommt die Tabelle selbst (4), mehr dazu siehe unten.

Falls Sie eine Fähigkeit angegeben haben, sehen Sie drei weitere Zeilen direkt unter der Tabelle (5):

  • Die erste Zeile zeigt das berechnete Recht. Der Wert ist entweder A (Allow / Erlauben) oder P (Prevent / Unterbinden).
  • Die zweite Zeile gibt an, ob Sie alles tun dürfen (Fähigkeit: moodle/site:doanything). Das ist normalerweise nur für Administrator/innen der Fall.
  • Die dritte Zeile gibt an, ob Sie dies tun dürfen, d.h. ob Sie die angegebene Fähigkeit haben. Wenn Sie die Fähigkeit Erlaubt alles auszuführen haben, dann haben Sie natürlich auch die angegebene Fähigkeit unabhängig vom berechneten Recht.

Wie man die Tabelle liest

Wenn der Zielkontext N Ebenen tief ist, hat die Tabelle N Zeilen und N Spalten, für jede Kontext-Ebene eine. Im obigen Beispiel gibt es vier Ebenen:

  System
     |
     |
  Kursbereich A
     |
     |
  Kurs cooking
     |
     |
  Modul quiz-1 (Test-1)

Die Spaltenüberschriften geben die Namen der Kontexte an. Diese werden nach Tiefe sortiert: System, Kursberecih A, Kurs cooking, Modul quiz-1 (Test-1) Um Platz zu sparen, hat die Tabelle keine Zeilenbezeichnungen, da diese den Spaltenüberschriften entsprechen. So würde z.B. Zeile 1 als System und Zeile 4 würde als quiz-1 (Test-1) bezeichnet werden.

Die erste Zeile enthält die Rollenzuweisungen, die auf jeder Kontext-Ebene gemacht wurden. Im Beispiel sieht man, dass R7 (Authentifizierte/r Nutzer/in) im System-Kontext zugewiesen wurde und im Kurskontext die Rolle R5 (Teilnehmer/in). Wenn es keine Rollenänderungen gibt (wie in diesem Beispiel), dann hat die Tabelle nur Einträge in der Zeile 1.

Die Buchstaben N und A in Klammern sind die Werte der Rechte für die Fähigkeiten in den Rollendefinitionen. Möglichen Werte sind:

  N - Not set (Nicht gesetzt)
  A – Allow (Erlauben)
  P – Prevent (Unterbinden)
  X – Prohibit (Untersagen)

Nicht gesetzt bedeutet, dass in der Rollendefinition keine Aussage für diese Fähigkeit getroffen wurde. Im Beispiel kann man sehen, dass für die Rolle R5 die Teilnahme an Tests auf erlauben gesetzt ist, während für die Rolle R7 keine Aussage getroffen wurde (nicht gesetzt).

Falls Rollenänderungen existieren, gibt es in anderen Zeilen der Tabelle Einträge. Rollenänderungen haben das gleiche Format wie Rollenzuweisungen (siehe Zeile 1). Eine Rollenänderung wird in der Zeile der Tabelle angezeigt, die dem Kontext entspricht, in dem die Rollenänderung vorgenommen wurde und in der Spalte der Zuweisung, die geändert wird.

Zur Veranschaulichung ändern wir jetzt die Rolle R5 (Teilnehmer/in) im Modul-Kontext quiz-1 (Test-1): Wir setzen die Fähigkeit mod/quiz:attempt (Test ausprobieren) auf Unterbinden. Wenn der Nutzer in der Rolle R5 jetzt versucht, am Test teilzunehmen, sollte er daran gehindert werden. Lassen wir nun das Skript erneut laufen, liefert es folgende Ausgabe:

sample output quiz attempt with override.png

Beachten Sie den neuen Eintrag R5(P) in Zeile 4, Spalte cooking. Das ist die Rollenänderung. Sie erscheint in der 4. Zeile, da die Rollenänderung im Modul-Kontext quiz-1 (Test-1) vorgenommen wurde, und in der Spalte des Kurses cooking, da die Teilnehmer-Rolle im Kontext des Kurses cooking zugewiesen wurde. Das berechnete Recht ist erwartungsgemäß P (Prevent / Unterbinden).

Wie Moodle Rechte berechnet

Eine umfassende Erklärung, wie Rechte berechnet werden, finden Sie auf der Seite Wie Rechte berechnet werden. Dieser Abschnitt zeigt nur, wie die Berechnung für die obigen Beispiele erfolgt.

Im ersten Beispiel (in dem wir nur Rollenzuweisungen in Zeile 1 hatten), durchsucht Moodle die Tabelle von rechts nach links. Da das erste Recht, das Moodle findet, 'A' (Allowed=erlaubt) ist, ist das berechnete Recht 'A' (Allowed=erlaubt).

sample output quiz attempt showing path.png

Im zweiten Beispiel (mit Rollenänderung), durchsucht Moodle die Tabelle im Zickzack-Muster von rechts unten nach links oben (siehe Grafik). Das erste Recht, auf das Moodle trifft, ist entscheidend: In unserem Beispiel ist es P (Prevent / Unterbinden).

sample output quiz attempt with override showing path.png

Wie man die Kontext-ID bestimmt

Nachstehend finden Sie die Regeln für das Bestimmen der Kontext-ID für jeden einzelnen Kontext-Typ.

Kurs-Kontext (Course)

In einem Kurs-Kontext ist die Kontext-ID die Kurs-ID. Die Kurs-ID ist aus der URL ersichtlich, die Sie in der Adresszeile Ihres Browsers sehen, wenn Sie auf der Kursseite sind. Wenn man z.B. auf den Kurs Features auf [demo.moodle.org demo.moodle.org] geht, sieht dass die Kurs-ID und damit auch die Kontext-ID für diesen Kurs gleich 2 ist.

URI of course in address bar.png

Falls Moodle Sie aus irgendeinem Grund nicht in den Kurs lässt, Sie aber einen Link auf den Kurs sehen, bewegen Sie Ihren Mauszeiger über den Link, wie unten gezeigt. Ihr Browser zeigt Ihnen dann unten im Fenster die URL an.

URI of course at bottom of browser window.png

Die Startseite einer Moodle-Installation ist auch ein Kurs mit der ID gleich 1.

Modul-Kontext (Module) - Lernaktivität oder Arbeitsmaterial

In einem Modul-Kontext ist die Kontext-ID die ID der Lernaktivität oder des Arbeitsmaterials. Die ID können Sie aus der URL ablesen, die in der Adresszeile Ihres Browsers erscheint, wenn Sie auf die Lernaktivität bzw. das Arbeitsmaterial klicken, oder unten im Browserfenster, wenn Sie Ihren Mauszeiger über einen Link auf die Aktivität bzw. das Arbeitsmaterial bewegen. Hier einige Beispiele:

  http://demo.moodle.org/mod/choice/view.php?id=25
  http://demo.moodle.org/mod/forum/view.php?id=28
  http://demo.moodle.org/mod/lesson/view.php?id=38
  http://demo.moodle.org/mod/quiz/view.php?id=61
  http://demo.moodle.org/mod/resource/view.php?id=10
  http://demo.moodle.org/mod/resource/view.php?id=48

Die Kontext-IDs für diese Module sind 25, 28, 38, 61, 10 und 48.

Block-Kontext

In einem Block-Kontext ist die Kontext-ID die Instanz-ID des Blocks. Um diese Instanz-ID zu erhalten, schalten Sie die Seite, auf der der Block ist, in den Bearbeitungsmodus (Klick auf Button Bearbeiten einschalten) und bewegen Sie Ihren Mauszeiger über das Augen-Symbol in der Kopfzeile des Blocks. Lesen Sie jetzt die ID aus der URL unten in Ihrem Browserfenster.

Beispiel:

  http://demo.moodle.org/course/view.php?id=28&instanceid=19

Die Kontext-ID für diesen Block ist gleich 19: instanceid=19. Beachten Sie, dass nur ein Nutzer, der die Seite in den Bearbeitungsmodus schalten darf, die ID des Blocks ermitteln kann.

Kursbereich-Kontext (Course category)

In einem Kursbereich-Kontext ist die Kontext-ID die Kursbereich-ID. Sie können die ID aus der URL ablesen, die in der Adresszeile Ihres Browsers erscheint, wenn Sie sich auf der Seite des entsprechenden Kursbereichs befinden. Sollte die Moodle-Installation nur einen Kursbereich haben (meistens heißt dieser Kursbereich Verschiedenes), dann ist die ID gleich 1. Wenn es mehr als einen Kursbereich gibt, ist es am einfachsten, die Kursbereich-ID eines bestimmten Kursbereichs zu ermitteln, wenn Sie es eine Kurs-Liste oder Kombi-Liste auf der Startseite gibt (oder einen Kurse-Block). Dann müssen Sie nur den Mauszeiger über den entsprechenden Kursbereich in der Liste aller Kurse bewegen.

Beipiel:

  http://mysite/course/category.php?id=3

Die Kontext-ID für diesen Kursbereich ist gleich 3.

Nutzer-Kontext (User)

Im Nutzer-Kontext ist die Kontext-ID die Nutzer-ID. Sie können die ID aus der URL ablesen, die in der Adresszeile des Browsers erscheint, wenn Sie sich auf der Profilseite der entsprechenden Person befinden, oder indem Sie Ihren Mauszeiger über den Namen der Person bewegen und die URL unten im Browserfenster ablesen.

Beispiel:

  http://demo.moodle.org/user/view.php?id=6&course=1

Die Kontext-ID für diesen Nutzer ist gleich 6.

System-Kontext

Es gibt nur einen System-Kontext. Seine ID ist gleich 1.

Das Skript sagt, dass ich darf, aber Moodle lässt mich nicht!

Wenn das passiert, liegt es daran, dass Moodle das Recht anders berechnet als Sie annehmen. Hier sind drei Beispiele:

  • Moodle berechnet das Recht in einem anderen Kontext als dem von Ihnen angegebenen (z.B. berechnet Moodle einige Rechte ausschließlich im System-Kontext oder Nutzer-Kontext).
  • Wenn Ihnen eine sogenannte Legacy-Rolle zugewisen wurde (d.h. eine Rolle aus einer Moodle-Version vor 1.7), ignoriert Moodle möglicherweise das berechnete Recht. Das gilt insbesondere für die Legacy-Rolle Gast. Wenn z.B. die Gast-Rolle geändert wurde, so dass Gäste in Foren Beiträge schreiben dürfen, dann zeigt das Skript rolesdebug.php an, dass Sie Forumsbeiträge schreiben dürfen, aber Moodle ignoriert dennoch dieses Recht. Wenn Sie einen Entwickler fragen, warum das so ist, erhalten Sie die Antwort weil Gäste grundsätzlich keine Forumsbeiträge schreiben dürfen.
  • Mehrere Fähigkeiten müssen auf erlauben gesetzt sein, damit Sie tatsächlich das tun dürfen, was Sie möchten.

Wenn also ein solcher Konflikt auftritt (das Skript erlaubt, etwas zu tun, aber Moodle nicht), muss genauer untersucht werden, wo das Problem liegt. Häufig finden Sie die Antwort in der Dokumentation. So gibt die Dokumentation normalerweise an, wenn ein Recht in einem anderen Kontext berechnet wird. In Zweifelsfall kann man direkt im Code nachsehen, was Moodle tatsächlich tut.