2012-05-14 2 views
8

moodle에서 로그인 한 사용자의 컨텍스트/역할을 얻는 방법? 컨텍스트 인식 블록을 구현하려고합니다. 이 블록은 사용자의 기분에 따라 적절한 퀴즈를 제안합니다.Moodle 로그인 한 사용자의 역할을 찾는 방법

역할은 교사, 학생, 교사 보조원 또는 관리자가 될 수 있습니다. 나는 이미 get_context_instance() & has_compatibility() 함수를 찾았지만이 목적을 위해 그것들을 어떻게 사용하는지 모른다.

+0

역할 및 컨텍스트 무 가장 복잡한 개념들 중 하나의 기능에 대한 결과를 사용하지만 짧은 버전은 일반적 문맥 인 단일 코스, 단일 카테고리 또는 전체 사이트에 적용됩니다. 해당 컨텍스트 내에서 역할이 부여되며 해당 컨텍스트 내에서 사용자에게 기능을 할당합니다. –

답변

3

무들의 경우 역할은 컨텍스트를 기반으로합니다. 이 코드 스 니펫이 도움이 될 것으로 생각합니다.

글로벌 $ 코스, $ 사용자;

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

곰이 완벽하게 가능 (하지만 가능성)임을 염두에두고는 기본 학생이없는 무들 사이트가 무 2에서 나

+0

이 코드는 좋지만 문제가 있습니다. 제가보기/코스에 없기 때문에 제가 홈페이지에 있다고 가정하고 그 역할이 무엇인지 알아야합니다. 이게 효과가 없을거야. – Ehsan

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

을 가지고 있습니다. 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); 
6

에 작동 교사 역할

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"; 
} 
관련 문제