如何从角色名称中找到角色ID?


17

登录时,我想检查一个用户的第三方数据源(数据库中的表),如果找到,我想向该用户添加一个角色。

我不想猜测角色的摆脱,我想从角色名称中获取角色。

Answers:


20

使用user_roles()array_search()非常简单。下面是一个函数,如果有与名称匹配的角色,则返回角色ID,否则返回FALSE。

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

一种班轮是:

$rid = array_search('administrator', user_roles());

1
user_roles()执行的查询被标记为translatable,这意味着模块可以翻译角色名称。Drupal仅转换默认角色(即匿名用户和已认证用户)的角色名称。
kiamlaluno

32

知道角色的机器名称后,就足够了user_role_load_by_name()

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

如果该角色可能不存在...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;

3
我非常喜欢这种方法,因为其他方法可以翻译角色名称。实际上,由user_roles()执行的查询被标记为translatable。Drupal仅转换默认角色的名称,但是模块也可以转换其他角色的名称。
kiamlaluno

4
$ rid =($ role = user_role_load_by_name())?$ role-> rid:NULL;
皮埃尔·布伊

-2

识别角色及其ID的最佳方法是使用SQL。在您的SQL编辑器中运行此查询。

select * from roles;

您将获得角色列表,包括ID和权重。


1
最好的方法是使用Drupal提供的API。如果有API,直接访问数据库绝不是一个好主意,也不是最好的方法。
kiamlaluno

这是获得角色的非常简单的方法!对于Drupal Stack Exchange Police否决了这种简单的解决方案,我并不感到惊讶。
BlondeSwan
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.