2011-03-08 21 views

cevap

23

Sadece bu PHP parçacığını kullanarak kullanıcı rollerine erişebilir:

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

> roller, rol kimliği tarafından girilen kullanıcıya ait rollerin bir dizisidir, değer, rol dizesidir. in_array

global $user; 

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

Not: kullanıcı olsaydı kontrol etmek istedim Yani eğer rol 'yetki sahibi kullanıcı' böyle bir şey olmazdı senin kod parçacığı (mutlaka en iyi duruma yaklaşım, in_array oldukça performansa pahalı fonksiyondur) Ayrıca (argüman # 1) "iğne" olarak bir dizi kabul böylece birden rol seçenekleri karşı kontrol edebilir:

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

$ kullanıcı tarafından: Bir kullanıcının birden rollerine kontrol etmek için bir ilginç çözüm bulduk

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

sayesinde bunu yapabilirsiniz, o yönetici olup olmadığını kontrol etmek. teşekkür ederim. – zhilevan

+4

İkinci "dizi" iğne snippit'inde, [docs başına] (http://php.net/manual/en/function.in-array.php) ve hızlı bir test kodunda, 'in_array'ı soruyorsunuz "$ user-> roles" dizisinin bir dizi dizi içerdiğini ('kimliği doğrulanmış kullanıcı', 'anonim kullanıcı') değil, '' kimliği doğrulanmış kullanıcı '' veya '' anonim kullanıcı '' öğelerini değil, kontrol etmek . [array_intersect()] (http://php.net/manual/en/function.array-intersect.php) bunun için hile yapardı. –

1

// anda oturum açan yükleyin.

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

//

size cevap benim için faydalı oldu

if (in_array('administrator', $user->roles)) { 
      // do some stuff 
      $form['field_end_date']['#disabled'] = FALSE; 
    } 
İlgili konular