Câu trả lời:
Vì bạn đã tìm thấy bài đăng đó , hãy chắc chắn rằng bạn cũng đã đọc các bình luận. Nó giải thích rõ ràng lý do tại sao việc kiểm tra cho phép được khuyến nghị hơn là kiểm tra vai trò. Khi bạn sử dụng quyền, bạn có thể gán quyền đó cho nhiều vai trò, điều này giúp hệ thống của bạn linh hoạt hơn. Ngoài ra, hãy nhớ rằng các vai trò có thể được đổi tên, sẽ phá vỡ mã của bạn.
Điều đó nói rằng, nếu bạn muốn kiểm tra vai trò, bạn có thể làm điều này:
// Load the currently logged in user.
global $user;
// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
// do fancy stuff
}
Để kiểm tra xem người dùng hiện tại có một vai trò hay bất kỳ vai trò nào không, một cách tuyệt vời là làm:
//can be used in access callback too
function user_has_role($roles) {
//checks if user has role/roles
return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};
if (user_has_role(array('moderator', 'administrator'))) {
// $user is admin or moderator
} else if(user_has_role('tester')){
// $user is tester
} else{
// $user is not admin and not moderator
}
Cập nhật cho phiên bản Drupal> = 7.36
Bạn có thể sử dụng chức năng user_has_role từ API Drupal https://api.drupal.org/api/drupal/modules%21user%21user.module/feft/user_has_role/7 .
Hãy thử ví dụ này:
<?php
function MYMODULE_foo() {
$role = user_role_load_by_name('Author');
if (user_has_role($role->rid)) {
// Code if user has 'Author' role...
}
else {
// Code if user doesn't have 'Author' role...
}
$user = user_load(123);
if(user_has_role($role->rid, $user)) {
// Code if user has 'Author' role...
}
else {
// Code if user doesn't have 'Author' role...
}
}
?>
Bạn có thể cài đặt mô-đun phát và làm dpm ($ user). Điều này sẽ in một mảng với tất cả thông tin người dùng bao gồm cả vai trò người dùng.
Từ mảng này, bạn có thể tìm vị trí mảng của "vai trò" và sử dụng nó trong mô-đun của bạn để tìm vai trò người dùng.
Để là Futureproof trong trường hợp tên vai trò thay đổi, tốt nhất là kiểm tra id vai trò (loại bỏ) có thể tìm thấy trong bảng vai trò trong cơ sở dữ liệu.
Nếu bạn muốn kiểm tra vai trò với 16, hãy làm:
// Load the currently logged in user.
global $user;
// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
// do fancy stuff
}
Đây là mã thực tế từ nhận xét được đề cập trong câu trả lời được chấp nhận là cách thực hành tốt nhất
<?php
function mymodule_perm() {
return array('access something special');
}
function dosomethingspecial() {
// For current user
if (user_access('access something special')) {
// Doing something special!
}
// For a specific user
if (user_access('access something special', $theuser)) {
// Doing something special!
}
}
?>
Bạn có thể kiểm tra vai trò của người dùng bằng print_r ($ user) và trong đầu ra, bạn sẽ nhận được một cái gì đó như thế này
đối tượng stdClass ( [uid] => 0 [tên máy chủ] => :: 1 [vai trò] => Mảng ( [1] => người dùng ẩn danh // Của tôi vai trò người dùng hiện tại là ẩn danh trong trường hợp của bạn, nó có thể khác )
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}