2012-05-14 20 views
8

Wie bekomme ich Kontext/Rolle des angemeldeten Benutzers in Moodle? Ich versuche, einen kontextsensitiven Block zu implementieren. Der Block würde seinen Benutzern die richtigen Quizfragen basierend auf ihren Stimmungen vorschlagen.Moodle, wie die Rolle des angemeldeten Benutzers

Rolle kann ein Lehrer, Schüler, Lehrer Assistent oder Administrator sein. Ich habe die get_context_instance() & has_compatibility() Funktionen bereits gefunden, aber ich weiß nicht, wie man sie für diesen Zweck benutzt.

+0

Rollen und Kontexte sind eine der kompliziertesten Konzepte in Moodle, aber die kurze Version ist ein Kontext allgemein gilt für einen einzelnen Kurs, eine einzelne Kategorie oder die gesamte Site. Eine Rolle wird in diesem Kontext gewährt und weist dem Benutzer innerhalb dieses Kontexts Fähigkeiten zu. –

Antwort

3

In moodle basieren die Rollen auf dem Kontext. Ich denke, dass dieses Code-Snippet für Sie hilfreich sein wird.

global $ KURS, $ USER;

$context = get_context_instance(CONTEXT_COURSE,$COURSE->id); 

if (has_capability('moodle/legacy:student', $context, $USER->id, false)) { 
echo "Student"; 
} 

if (has_capability('moodle/legacy:editingteacher', $context, $USER->id, false)) { 
echo "is Teacher<br/>"; 
} 
if (has_capability('moodle/legacy:admin', $context, $USER->id, false)) { 
echo "is ADMIN<br/>"; 
} 

Bedenken Sie, dass es durchaus möglich ist (aber unwahrscheinlich) eine Moodle ohne den Standard Student and Teacher Rollen haben

+0

Dieser Code ist gut, aber es gibt ein Problem. Da ich nicht im Blick/Kurs bin, nehme ich an, ich bin auf der Homepage und ich möchte herausfinden, was die Rolle ist. Das wird nicht funktionieren – Ehsan

9
$context = get_context_instance (CONTEXT_SYSTEM); 
$roles = get_user_roles($context, $USER->id, false); 
$role = key($roles); 
$roleid = $roles[$role]->roleid; 

es mir arbeitet

6

In Moodle 2. x Sie können die Funktion get_user_roles verwenden, und dies wird die Liste der Rollen zurückgeben, die einem bestimmten Benutzer im Kontext des Kurses oder der Site oder des Moduls zugewiesen sind.

Sie können auch die Rollen im Kontext des Moduls erhalten.

$context = get_context_instance(CONTEXT_MODULE, $cm->id, true); 
$roles = get_user_roles($context, $USER->id, true); 
1

Sie für die Rollen testen kann ein Benutzer auf folgende Weise:

if (user_has_role_assignment($user1->id, $roleid)) 
    echo "User is a teacher in some course"; 

Die Rolle ID eines Lehrers ist in der Regel 3 und die Rollen-ID eines Studenten ist in der Regel 5, aber Sie können dies in der Tabelle unter Site Administration-> Users -> Permissions -> Define Roles überprüfen

Bitte beachten Sie, dass ein Benutzer verschiedene Rollen haben kann. Die Funktion user_has_role_assignment scheint zu testen, welche Rollen er systemweit hat.

8

Überprüfung Benutzer ist ein Admin oder nicht

$admins = get_admins(); 
$isadmin = false; 
foreach($admins as $admin) { 
    if ($USER->id == $admin->id) { 
     $isadmin = true; 
     break; 
    } 
} 

das Ergebnis für Funktionen verwenden

if ($isadmin) { 
    echo "you are an admin";  
} else { 
    echo "you are not an amidn"; 
} 
Verwandte Themen