Odpowiedzi:
Ponieważ już znalazłeś ten post , upewnij się, że przeczytałeś również komentarze. Wyjaśnia jasno, dlaczego zaleca się sprawdzanie uprawnień zamiast sprawdzania roli. Korzystając z uprawnień, możesz przypisać to uprawnienie do wielu ról, co czyni system bardziej elastycznym. Pamiętaj też, że można zmienić nazwy ról, co spowodowałoby uszkodzenie twojego kodu.
To powiedziawszy, jeśli chcesz sprawdzić rolę, możesz to zrobić:
// 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
}
Aby sprawdzić, czy bieżący użytkownik ma jedną rolę, czy jedną z wielu ról, doskonałym sposobem jest:
//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
}
Aktualizacja dla wersji Drupal> = 7,36
Możesz użyć funkcji user_has_role z Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 .
Spróbuj tego przykładu:
<?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...
}
}
?>
Możesz zainstalować moduł devel i zrobić dpm ($ user). Spowoduje to wydrukowanie tablicy ze wszystkimi informacjami o użytkowniku, w tym o roli użytkownika.
Z tej tablicy można znaleźć pozycję tablicy „ról” i użyć jej w module, aby znaleźć rolę użytkownika.
Aby być przyszłościowym na wypadek zmiany nazwy roli, najlepiej sprawdzić identyfikator roli (rid), który można znaleźć w tabeli ról w bazie danych.
Jeśli chcesz sprawdzić rolę w rid 16, wykonaj:
// 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
}
Oto rzeczywisty kod z komentarza , który w przyjętej odpowiedzi jest określany jako najlepsza praktyka
<?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!
}
}
?>
Możesz sprawdzić rolę użytkownika przez print_r ($ user), a w wyniku otrzymasz coś takiego
Obiekt stdClass ( [uid] => 0 [nazwa hosta] => :: 1 [role] => Array ( [1] => anonimowy użytkownik // Moja obecna rola użytkownika jest anonimowa w twoim przypadku może być inna )