2011-03-08 38 views

Trả lời

23

Bạn có thể truy cập vào các vai trò người dùng bằng cách chỉ sử dụng đoạn mã PHP này:

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

Tôi đã tìm thấy một giải pháp thú vị để kiểm tra xem có nhiều vai trò của một người dùng:

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

$ user- > vai trò là một mảng các vai trò thuộc về người dùng được khóa bởi ID vai trò, giá trị là chuỗi vai trò. Vì vậy, nếu bạn muốn kiểm tra xem người dùng có vai trò 'chứng thực người dùng đoạn mã của bạn sẽ giống như thế này (không nhất thiết phải là cách tiếp cận tối ưu nhất, in_array là một chức năng khá hiệu đắt tiền):

global $user; 

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

Lưu ý rằng in_array cũng có thể chấp nhận một mảng là "kim" (đối số # 1) để bạn có thể kiểm tra nhiều tùy chọn vai trò:

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

nhờ câu trả lời của bạn là hữu ích cho tôi. cảm ơn bạn. – zhilevan

+4

Trên đoạn trích thứ hai 'mảng' kim, [mỗi tài liệu] (http://php.net/manual/en/function.in-array.php) và một đoạn mã kiểm tra nhanh, bạn đang hỏi 'in_array' để kiểm tra xem liệu '$ user-> roles' có chứa mảng' mảng ('người dùng được xác thực', 'người dùng ẩn danh') ', không phải là các phần tử riêng lẻ '' người dùng đã xác thực'' hay' 'người dùng ẩn danh'' . [array_intersect()] (http://php.net/manual/en/function.array-intersect.php) sẽ thực hiện thủ thuật cho điều đó. –

1

// Tải người dùng hiện đã đăng nhập.

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

// để kiểm tra xem ông là người quản lý, bạn có thể làm như vậy bằng cách

if (in_array('administrator', $user->roles)) { 
      // do some stuff 
      $form['field_end_date']['#disabled'] = FALSE; 
    } 
Các vấn đề liên quan