O recurso é bastante útil para coisas como esta. No entanto, se você precisar criar funções e adicionar permissões programaticamente, não precisará pesquisar o banco de dados por conta própria.
Quando você cria uma nova função de usuário user_role_save(), ele atualiza o objeto que você transmitiu com o novo ID de função de usuário atribuído. Você pode ver um exemplo disso na standard_install()função no perfil de instalação padrão.
$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));
Este exemplo mostra que você pode criar uma nova função de usuário e acessar sua ridpropriedade, que foi preenchida por user_role_save(). Também mostra como adicionar permissões a essa função user_role_grant_permissions(). Nesse caso, está concedendo à função 'administrador' todas as permissões disponíveis.
Se você precisar obter o ID de uma função de usuário criada por outra pessoa, poderá usar user_role_load_by_name()para obter o objeto para essa função de usuário. Então você apenas pega o id com $role->rid.