2011-03-08 7 views

답변

23

당신은 그냥이 PHP 조각 사용하여 사용자 역할에 액세스 할 수 있습니다

global $user; 
$check = array_intersect(array('moderator', 'administrator'), array_values($user->roles)); 
if (empty($check) ? FALSE : TRUE) { 
    // is admin 
} else { 
    // is not admin 
} 
9

을 > roles는 역할 ID로 입력 된 사용자에게 속한 역할의 배열이고, value는 역할 문자열입니다. 와 in_array

global $user; 

if (in_array('authenticated user', $user->roles)) { 
    //do stuff here 
} 

참고 : 사용자가이 있다면 당신이 확인하고 싶어한다면 역할은 '사용자 인증'같은 것을 보일 것이다 당신의 코드 (반드시 가장 최적화 된 방법은,와 in_array는 상당히 성능 비싼 기능입니다) 배열을 "needle"(인수 # 1)으로 받아 들일 수 있으므로 여러 역할 옵션을 확인할 수 있습니다.

in_array(array('authenticated user', 'anonymous user'), $user->roles); 
24

$ 사용자 - : 나는 사용자의 여러 역할을 확인하기 위해 흥미로운 솔루션을 발견

<?php $GLOBALS['user']->roles; ?> 
+0

감사하면됩니다, 그는 관리자인지 확인합니다. 고맙습니다. – zhilevan

+4

두 번째 '배열 된'바늘 조각 인 [docs] (http://php.net/manual/en/function.in-array.php) 및 간단한 테스트 코드에서'in_array'를 묻습니다. '$ user-> roles'가'인증 된 사용자 '또는'익명의 사용자'가 아닌'array ('인증 된 사용자', '익명의 사용자')'의 배열을 포함하고 있는지 확인합니다. . [array_intersect()] (http://php.net/manual/en/function.array-intersect.php)도 그렇게 할 것입니다. –

1

// 현재 로그인 한 사용자를로드하십시오.

global $user; 
print_r($user->roles);//this gives you current user roles 

//

당신은 당신의 대답은 나를 위해 유용

if (in_array('administrator', $user->roles)) { 
      // do some stuff 
      $form['field_end_date']['#disabled'] = FALSE; 
    } 
관련 문제