Jawaban:
Karena Anda sudah menemukan posting itu , pastikan Anda juga membaca komentar. Ini dengan jelas menjelaskan mengapa memeriksa izin direkomendasikan daripada memeriksa peran. Saat Anda menggunakan izin, Anda dapat menetapkan izin itu ke beberapa peran, yang membuat sistem Anda lebih fleksibel. Juga, ingatlah bahwa peran dapat diubah namanya, yang akan merusak kode Anda.
Yang mengatakan, jika Anda ingin memeriksa peran, Anda dapat melakukan ini:
// 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
}
Untuk memeriksa apakah pengguna saat ini memiliki peran tunggal atau peran ganda apa pun, cara yang bagus adalah dengan melakukan:
//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
}
Pembaruan untuk versi Drupal> = 7.36
Anda dapat menggunakan fungsi user_has_role dari Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 .
Coba contoh ini:
<?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...
}
}
?>
Anda dapat menginstal devel module dan melakukan dpm ($ user). Ini akan mencetak array dengan semua informasi pengguna termasuk peran pengguna.
Dari larik ini, Anda dapat menemukan posisi larik "peran" dan menggunakannya dalam modul Anda untuk menemukan peran pengguna.
Untuk menjadi futureproof jika nama peran berubah, yang terbaik adalah memeriksa id peran (menyingkirkan) yang dapat ditemukan di tabel peran dalam database.
Jika Anda ingin memeriksa peran dengan rid 16, lakukan:
// 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
}
Berikut kode aktual dari komentar yang disebut dalam jawaban yang diterima sebagai praktik terbaik
<?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!
}
}
?>
Anda dapat memeriksa peran pengguna dengan print_r ($ user) dan hasilnya Anda akan mendapatkan sesuatu seperti ini
stdClass Object ( [uid] => 0 [hostname] => :: 1 [peran] => Array ( [1] => pengguna anonim // Tambang peran pengguna saat ini adalah anonim dalam kasus Anda, ini mungkin berbeda )