检查用户是否有角色


46

如何检查用户是否具有特定角色?

我找到了,但这是针对Drupal 6的。

Answers:


87

既然您已经找到了该帖子,请确保您还阅读了评论。它清楚地解释了为什么建议检查角色而不是检查角色。使用权限时,可以将该权限分配给多个角色,这使您的系统更加灵活。另外,请记住,可以重命名角色,这会破坏您的代码。

也就是说,如果您要检查角色,可以执行以下操作:

// 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
}

1
如果我想检查多个角色怎么办。例如,如果是“编辑”或“发布者”而不是花哨的东西。如何编码。请建议。真的不知道。
Adamtan

8
请阅读答案:不建议检查一个角色(或多个)。检查权限。您剩下的问题(在if语句中组合两个条件)是基本的PHP,与Drupal无关。阅读有关逻辑运算符的PHP文档。
marcvangend

11

要检查当前用户是一个角色还是多个角色,最好的方法是:

//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
}

9

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...
  }
}
?>

2

您可以安装devel模块并执行dpm($ user)。这将打印一个包含所有用户信息(包括用户角色)的数组。

从该数组中,您可以找到“角色”的数组位置,并在模块中使用它来查找用户角色。


在“开发”->“执行PHP代码”下,输入:global $ user; dpm($ user);
diamondsea

1

为防万一,以防万一角色名称发生更改,最好检查一下可以在数据库的角色表中找到的角色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
}

1
其实,当你迁移之类的角色,机器的名字可能会被保留,而ID不会
Mołot

角色表中没有机器名称,只有一个骑手名和一个人名。users_roles表将uid分配给rid。
汉斯·罗塞尔

1

这是评论中的实际代码,在接受的答案中被称为最佳实践

<?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!
    }
  }
?>

0

您可以通过print_r($ user)来检查用户的角色,在输出中您将获得类似以下内容的信息

stdClass对象
(
    [uid] => 0
    [主机名] => :: 1
    [角色] =>数组
        (
            [1] =>匿名用户//您所用的当前用户角色是匿名的,可能有所不同
        )

0

检查用户是否具有特定角色:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}

0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}

0

上面的答案不起作用,不确定的方式,我发现这篇文章和代码应该是

//检查$ user是否具有管理员角色。if(in_array('administrator',array_values($ user-> roles))){//做点什么。}?>`

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.