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.

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());

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;

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.