A concessão de um papel Drupal para todos os usuários que têm um certo papel

StackOverflow https://stackoverflow.com/questions/1669785

  •  13-09-2019
  •  | 
  •  

Pergunta

Eu preciso aplicar automaticamente um papel, Papel X, para todos os usuários do Drupal que foram concedidos um papel separado, Y. Papel Em outras palavras, eu desejo para Papel X para ser um subconjunto de Y. Papel Como posso fazer isso?

Foi útil?

Solução

Você poderia implementar hook_user() em um módulo personalizado. Na 'inserção' e / ou ação 'update', você verificar se há papel Y na matriz $account->roles. Se estiver presente, o papel add X se já não estiver lá. Isto assegura que a sua regra é aplicado cada vez que uma conta de usuário é criado e / ou alterado.

Para uma operação de bootstrapping / uma vez, dê uma olhada user_multiple_role_edit() . Ele permite que você adicionar ou remover funções de um conjunto de IDs de usuário. Alternativamente, você pode fazê-lo diretamente no banco de dados:

INSERT INTO users_roles (uid, rid)
  SELECT uid, [roleX_ID] AS rid FROM users_roles
    WHERE uid IN
      (SELECT uid FROM users_roles WHERE rid = [roleY_ID])
    AND uid NOT IN
      (SELECT uid FROM users_roles WHERE rid = [roleX_ID])
;

Outras dicas

Concordo com Henrik Opel sobre o uso hook_user em um módulo personalizado seria uma boa solução para manter os usuários e garantir que eles estão atualizados o tempo todo.

Normalmente eu não me importaria de escrever SQL ou algo semelhante, mas neste caso, uma vez que está em um local de produção, eu preferiria um caminho diferente, uma vez que se algo pode facilmente dar errado ao escrever SQL cru, um pouco pode erro de digitação causar grandes problemas. Outro ponto positivo é que você pode executar em problemas como Drupal não vai estar ciente do que SQL cru que você executar no seu banco de dados e pode ficar fora de sincronia com alguns processos, ganchos e outros processos que é normalmente executados quando você faz as coisas através da API Drupal.

Em vez disso você pode usar a interface de usuário de administração do Drupal. Eu realmente acho que, neste caso, é o mais fácil maneira de fazer o que quiser. Simplesmente filtrar todos os usuários que são estudantes. Clique em todos os utilizadores e dar-lhes o papel de membro. Isso é feito com alguns cliques, em nenhum momento, e é muito seguro desde Drupal vai lidar com todo o SQL para você.

Atualização
Com que muitos usuários, eu estou surpreso que você não tem um usuário personalizada e configuração da página gerenciar conteúdo usando views_bulk_operations . Usando alguns minutos, você pode configurar uma página de administração que você pode usar para operações de pré-forma em massa como a mudança de status do usuário, papéis, ou executar tarefas semelhantes para nós. Você pode criar seus próprios filtros usando expostas vistas filtros. Assim, com apenas alguns cliques você pode selecionar todos os usuários com o papel de aluno e que não é membro, selecione todos eles e adicionar o rolo de membro para eles. A vantagem de fazer isso não só que é rápido e seguro é, mas você pode criar alguma boa gestão de páginas para seus administradores do site, os criadores de conteúdo etc. Você deve considerar olhando para este módulo.

O módulo LDAP permite-lhe papéis atribuir dinamicamente com base em DN. Eu realmente tive que escrever meu próprio módulo que é feito especificamente para o nosso sistema, caso contrário eu seria mais do que feliz em compartilhá-lo.

texto do link

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top