2011-03-08 48 views

回答

23

您可以只使用这个PHP代码段访问用户角色:

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

我发现了一个有趣的解决方案,以检查用户的多重角色:

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

$用户>角色是属于由角色ID键入的用户角色的数组,值是角色字符串。所以,如果你想检查用户是否有角色“认证用户”您的代码段会是这个样子(不一定是最优化的方法,in_array是一个相当性能昂贵的功能):

global $user; 

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

注意in_array还可以接受数组作为“针”(参数#1),所以你可以检查对多种角色选择:

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

感谢你的答案对我来说是有用的这样做。谢谢。 – zhilevan

+4

在第二个'阵列'针snippit,[每个文档](http://php.net/manual/en/function.in-array.php)和一些测试代码,你问'in_array'检查'$ user-> roles'是否包含'array('authenticated user','anonymous user')',而不是单个元素''authenticated user''或''anonymous user'' 。 [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; 
    } 
相关问题