Antworten:
Da Sie diesen Beitrag bereits gefunden haben , lesen Sie auch die Kommentare. Es wird klar erläutert, warum das Prüfen auf eine Berechtigung gegenüber dem Prüfen auf eine Rolle empfohlen wird. Wenn Sie Berechtigungen verwenden, können Sie diese mehreren Rollen zuweisen, wodurch Ihr System flexibler wird. Denken Sie auch daran, dass Rollen umbenannt werden können, wodurch Ihr Code beschädigt wird.
Das heißt, wenn Sie nach einer Rolle suchen möchten, können Sie dies tun:
// 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
}
Um zu überprüfen, ob der aktuelle Benutzer eine einzelne Rolle oder eine von mehreren Rollen hat, bieten sich folgende Möglichkeiten an:
//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
}
Update für Drupal-Version> = 7.36
Sie können die Funktion user_has_role über die Drupal-API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 verwenden .
Versuchen Sie dieses Beispiel:
<?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...
}
}
?>
Sie könnten das Entwicklungsmodul installieren und dpm ($ user) ausführen. Dadurch wird ein Array mit allen Benutzerinformationen einschließlich der Benutzerrolle gedruckt.
In diesem Array können Sie die Array-Position von "Rollen" ermitteln und in Ihrem Modul verwenden, um die Benutzerrolle zu ermitteln.
Um für den Fall, dass sich der Rollenname ändert, zukunftssicher zu sein, überprüfen Sie am besten die Rollen-ID (rid), die in der Rollentabelle in der Datenbank zu finden ist.
Wenn Sie mit rid 16 nach einer Rolle suchen möchten, gehen Sie wie folgt vor:
// 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
}
Hier ist der eigentliche Code aus dem Kommentar , der in der akzeptierten Antwort als Best Practice bezeichnet wird
<?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!
}
}
?>
Sie können die Rolle eines Benutzers mit print_r ($ user) überprüfen und in der Ausgabe erhalten Sie so etwas
stdClass-Objekt ( [UID] => 0 [Hostname] => :: 1 [Rollen] => Array ( [1] => anonymer Benutzer // Meine aktuelle Benutzerrolle ist anonym, in Ihrem Fall kann dies anders sein )
Die obigen Antworten haben nicht funktioniert, ich bin mir nicht sicher, ob ich diesen Beitrag gefunden habe und der Code sollte "lauten"
// Überprüfen Sie, ob $ user die Administratorrolle hat. if (in_array ('administrator', array_values ($ user-> rollers)) {// Mach etwas. }?> `