Como localizo o ID da função no nome da função?

17

No login, desejo verificar se há uma fonte de dados de terceiros (tabela no banco de dados) e, se encontrado, quero adicionar uma função a esse usuário.

Não quero adivinhar o papel, quero tirá-lo do nome do papel.

chim
fonte

Respostas:

20

Isso é bastante simples com user_roles () e array_search () . Abaixo está uma função que retornará o ID da função se houver uma função correspondente ao nome e FALSE caso contrário.

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

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

Um revestimento seria:

$rid = array_search('administrator', user_roles());
Lauri
fonte
1
A consulta executada por user_roles () é etiquetada como traduzível , o que significa que um módulo pode traduzir os nomes das funções. Drupal converte os nomes das funções apenas para as funções padrão (ou seja, usuário anônimo e usuário autenticado).
kiamlaluno
32

Conhecendo o nome da máquina da função, é suficiente usá-la user_role_load_by_name().

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

Se a função não existir ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
chim
fonte
3
Eu prefiro muito essa abordagem, pois com a outra abordagem os nomes das funções podem ser traduzidos. De fato, a consulta executada por user_roles () é etiquetada como traduzível . Drupal converte apenas os nomes das funções padrão, mas um módulo também pode traduzir os outros nomes de função.
kiamlaluno
4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
22613 Pierre Buyle
-2

A melhor maneira de identificar a função e seu ID é do SQL. Execute esta consulta no seu editor SQL.

select * from roles;

E você obterá a lista de funções, incluindo o ID e o peso.

Caminho das Apostas
fonte
1
A melhor maneira é usar a API fornecida pelo Drupal. Acessar diretamente o banco de dados, quando existe uma API, nunca é uma boa ideia, nem a melhor maneira.
Kiamlaluno
Esta é uma maneira muito fácil de conseguir os papéis! Não estou surpreso que a polícia do Drupal Stack Exchange tenha rejeitado uma solução tão simples.
BlondeSwan