Módulo Views: Como limitar o acesso do usuário

8

Estou usando o módulo Visualizações para criar uma exibição que somente usuários específicos devem poder acessar. Sei que o Views inclui controle de acesso por função ou permissões, mas preciso de algo mais refinado: Basicamente, quero poder dizer que apenas o usuário "x" e o usuário "y" podem acessar uma exibição específica (ou alguém com uma função de administrador do site). Portanto, isso funcionaria muito semelhante ao modo como o módulo ACL atua para nós individuais.

A melhor abordagem é criar um plug-in de acesso a visualizações personalizadas? Eu não tenho muita experiência com isso.

Além disso, estou pensando em usar um argumento com alguma validação para fazer isso (para que não precise criar dezenas de visualizações separadas). Por exemplo, como essa visualização será uma guia em um caminho de nó específico, estou pensando em configurar um campo de referência de usuário nesse nó que especifique quem poderá ver a visualização. Eu só precisaria de uma maneira para a exibição validar apenas se o usuário atual for igual a um usuário especificado no campo de referência do usuário.

Alguma ideia? Ou estou tornando isso mais complicado do que precisa ser?

Obrigado Ben

BenK
fonte
Talvez seja necessário escrever um plug-in de acesso a visualizações, mas se você puder atualizar sua pergunta com um pouco mais de detalhes, talvez seja possível fazê-lo de outra maneira. O que a exibição faz / exibe? Quais usuários têm permissão para visualizá-lo? Os usuários têm funções diferentes? Os usuários têm um campo específico ou algo associado a eles que lhes permite acessá-lo?
Jamie Hollern
Jamie, Obrigado pela resposta. Na verdade, também estou usando o Drupal Commerce para criar um tipo único de loja online. Como uma guia em cada nó do produto (além das guias Visualizar e Editar), desejo criar uma guia adicional chamada "Pedidos" que seria uma exibição que mostre todos os pedidos que incluíram esse produto em particular. O fornecedor do produto específico é o usuário que eu desejo que seja capaz de ver a exibição "Pedidos" desse produto.
BenK 24/05
Dessa forma, o fornecedor pode monitorar as vendas de seus produtos continuamente. Mas não quero conceder acesso a todos com a função de "fornecedor", pois qualquer fornecedor poderá visualizar as vendas dos produtos de outros fornecedores. Faz sentido? ;-)
BenK

Respostas:

5

Em vez de limitar as permissões na exibição, você pode limitar as permissões no item de menu que leva a essa exibição (seja uma guia em um nó ou um retorno de chamada do menu). Você pode criar sua exibição com apenas uma exibição "Padrões" e nenhuma exibição de página (para que os usuários não possam apenas descobrir o caminho para ela). Em seu page callbackitem de menu, basta ligar views_embed_viewpara exibir a exibição. Parece que lidar com permissões em um item de menu pode ser mais fácil do que escrever um novo plug-in para Views (embora um plug-in possa ser útil para outros).

Chaulky
fonte
Obrigado pela sugestão! Acabei seguindo essa abordagem geral (que também foi sugerida por Berdir), mas criei um campo de referência do usuário em cada nó chamado field_usercanaccess. Consegui usar hook_menu () e definir um retorno de chamada de acesso que garantisse que o usuário atual correspondesse a um usuário referenciado no campo. Caso contrário, a guia (e a visualização) não seriam exibidas. Isso está funcionando muito bem! :-)
BenK 7/07
@BenK awesome! Estou feliz que você tenha algo funcionando. Como parte de ajudar a tornar o Drupal Answers um ótimo recurso, você também deve votar nas respostas (ou perguntas) que achar úteis. Então você provavelmente deve votar em resposta da @ Berdir (e meu, mas isso não é comigo tentando conseguir votos, ele está tentando fazer Drupal Respostas um local melhor)
Chaulky
Obrigado. :-) Sou novo no Stack Exchange e só tenho 13 pontos. Quando tento votar, diz que preciso de 15 pontos para votar. Portanto, se alguém tem dois pontos de sobra (ou posso obtê-los de outra maneira), eu definitivamente votaria em respostas e perguntas. --Ben
Benk
@ BenK oh certo, eu esqueci o limite de 15 pontos. Você sempre pode tentar responder a uma pergunta ... um voto positivo na sua resposta recebe 10 representantes.
Chaulky
6

Experimente o módulo Views Access Callback .

Fornece controle de acesso baseado em retorno de chamada para Views.

As funções de retorno de chamada disponíveis são definidas por módulos usando a hook_views_access_callbacks()função (da mesma maneira que em hook_perm()) e, em seguida, podem ser definidas na configuração "Restrições de acesso" da exibição.

user5318
fonte
O uso de visualizações de retorno de chamada funciona muito bem, exceto por um erro fatal estranho. Veja aqui: drupal.stackexchange.com/questions/3336/… . Parece o caminho a percorrer - mas como consertar?
Druvision
2

Devo estar faltando alguma coisa, mas parece que você criaria uma nova função e adicionaria esses usuários. Em seguida, use o recurso Acesso às exibições: função.

Se você precisar vincular os direitos de acesso a algo no conteúdo, eu usaria um acesso personalizado ao Views, que achei difícil configurar na primeira vez, mas aprecio a flexibilidade depois de trabalhar. Se a tela estiver gerando o item de menu, ela não aparecerá se a tela não passar na função de acesso.

Se você está apenas ocultando um item de menu, parece-me que a exibição ainda será executada e um Usuário poderá ajustar um URI para exibir os dados.

Jerry

Jerry
fonte
1

Que tal usar o módulo Permissões Personalizadas para criar algumas novas permissões especificamente para seu objetivo e usar o módulo Permissões do Usuário para atribuir essas novas permissões a usuários individuais?

O módulo de permissões personalizadas é muito leve. No entanto, não tenho tanta certeza sobre o módulo de permissões de usuário, pois ele cria uma nova função para cada usuário nos bastidores (essas funções não são visíveis na página principal de permissões). Se você tem muitos usuários, isso pode aumentar um pouco o tamanho das suas funções e das tabelas user_roles.

Tom Kirkpatrick
fonte
Essa é uma sugestão interessante para usar permissões personalizadas. Eu não tinha visto esse módulo desde que se tornou mais amplo do que apenas as Permissões de configuração do site. A única complicação aqui é que estou fazendo tudo isso no Drupal 7 (e ainda não existe um ramo oficial). Mas, se eu conseguir fazer isso funcionar, pode ser possível especificar a permissão no controle de acesso da exibição diretamente (sem a necessidade do módulo Permissões do Usuário). Obrigado pela sugestão! :-)
BenK
Vou tentar isso e relatar de volta.
BenK 24/05
0

Certo, isso faz mais sentido. Eu acho que você poderia (possivelmente, não 100% de certeza) usar uma View e um argumento. Defina o argumento como um ID de usuário obtido do usuário conectado no momento e faça com que o argumento padrão não exiba nada. Isso deve ser capaz, embora eu não saiba o quão seguro seria ser justo. Se você tentar, poste de volta e deixe-me saber seu progresso.

Jamie Hollern
fonte
Sim, vou tentar as coisas e relatar de volta. Também estou tentando um plug-in de acesso a visualizações com um argumento, para ver como ele vai. Obrigado.
BenK 24/05
0

Se você deseja combinar plug-ins de acesso diferentes no Views, consulte o módulo Access access many .

Steven Jones
fonte