2012-05-14 49 views
8

如何獲取登錄用戶在moodle中的上下文/角色? 我想實現一個上下文感知塊。該區塊會根據用戶的情緒向其用戶提供正確的測驗。Moodle如何找出登錄用戶的角色

角色可以是教師,學生,教師助理或管理員。我已經找到了這個功能,但是我不知道如何使用它們。

+0

角色和情境是在Moodle中最複雜的概念之一的結果,但短版本是上下文通常適用於單一課程,單一類別或整個網站。在該上下文中授予角色,並在該上下文中向用戶分配功能。 –

回答

3

在moodle中,角色是基於上下文的。 我認爲這段代碼會對你有所幫助。

global $ COURSE,$ 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/>"; 
} 

請記住,這是完全可能的(但不太可能)有沒有默認的學生一個的Moodle站點和教師角色

+0

這段代碼很好,但是有一個問題。由於我不在視圖/課程中,假設我在主頁上,我想知道角色是什麼。這是行不通的 – Ehsan

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

它的作品對我

6

在Moodle的2。 x您可以使用功能get_user_roles,這將返回在課程或站點或模塊的上下文中分配給特定用戶的角色列表。

$context = get_context_instance(CONTEXT_COURSE, $courseid, true); 
$roles = get_user_roles($context, $USER->id, true); 

您還可以獲取模塊上下文中的角色。

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

可以測試該角色的用戶有以下方式:

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

教師的角色ID通常爲3,和學生的角色ID通常爲5,但您可以在「站點管理 - >用戶 - >權限 - >定義角色」中查看錶格。請注意,一個用戶可以具有不同的角色。函數user_has_role_assignment似乎測試他具有系統範圍的角色。

8

檢查用戶是管理員或不

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

用於功能

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