Answers:
既然您已经找到了该帖子,请确保您还阅读了评论。它清楚地解释了为什么建议检查角色而不是检查角色。使用权限时,可以将该权限分配给多个角色,这使您的系统更加灵活。另外,请记住,可以重命名角色,这会破坏您的代码。
也就是说,如果您要检查角色,可以执行以下操作:
// 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
}
要检查当前用户是一个角色还是多个角色,最好的方法是:
//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
}
Drupal版本> = 7.36的更新
您可以从Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7使用功能user_has_role 。
试试这个例子:
<?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...
}
}
?>
您可以安装devel模块并执行dpm($ user)。这将打印一个包含所有用户信息(包括用户角色)的数组。
从该数组中,您可以找到“角色”的数组位置,并在模块中使用它来查找用户角色。
为防万一,以防万一角色名称发生更改,最好检查一下可以在数据库的角色表中找到的角色ID(“ rid”)。
如果您想检查是否有角色16,请执行以下操作:
// 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
}
这是评论中的实际代码,在接受的答案中被称为最佳实践
<?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!
}
}
?>