Como um usuário pode acessar apenas um nó específico, e nem todos os nós desse tipo?

10

Eu tenho um usuário com direitos de exibição e edição para um tipo de conteúdo específico. Isso concede o privilégio a todos os usuários de visualizar e editar todos os nós desse tipo. Mas, na verdade, quero criar para cada usuário um nó exclusivo, para que somente esse usuário possa visualizá-lo e editá-lo. Como posso fazer isso no Drupal 7?

Ek Kosmos
fonte
1
Você quer dizer como você pode fazer isso usando um módulo ou como pode fazer isso escrevendo o código necessário?
kiamlaluno
Outra maneira é recusar o nó usando e estendendo o perfil do usuário por campos.
ya.teck
Parece que esse nó por usuário pode atender a algum tipo de requisito de perfil de usuário. Ele precisa ser um nó separado ou não seria melhor estender a própria entidade do usuário com campos adicionais?
Alfred Armstrong
O Drupal 7 removeu as permissões de exibição do nó por usuário. Você pode trazê-los de volta com este módulo drupal.org/project/node_view_permissions
giorgio79
módulo de uso link "nodeaccess" é drupal.org/project/nodeaccess eu desejo que ele vai ajudar você
Mahipal Purohit

Respostas:

11

Usando um módulo existente, você pode fazer isso com o Content Access , que (quando usado em conjunto com a ACL ) permite definir as permissões para acessar um nó para cada usuário.
Isso significa que você precisa definir as permissões de acesso manualmente para cada nó.

Se você criar manualmente os nós e desejar garantir que apenas o usuário definido como proprietário do nó possa visualizá-lo (e editá-lo), poderá criar um módulo personalizado (o que significa um módulo que é usado no seu site) e implemente da hook_node_access()seguinte maneira (o código foi escrito para facilitar a leitura):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Usando esta implementação de gancho, você não precisa editar manualmente as permissões de acesso fornecidas para cada nó desse tipo de conteúdo que você criar. Alterar o proprietário do nó também seria mais fácil, pois você não precisa alterar as permissões de acesso desse nó; o código concederia automaticamente a atualização e exibia permissões para o usuário definido como proprietário (ou autor) do nó.

kiamlaluno
fonte
5

Você não precisa de nenhum módulo especial ou código personalizado para fazer isso. Apenas crie manualmente esses nós, defina os usuários apropriados como proprietário (autor) dos nós e defina permissões para este tipo de conteúdo para editar apenas o próprio conteúdo (não editar nenhum conteúdo desse tipo) e pronto.

Petr Svehla
fonte
1

O que você está falando é sobre o controle de acesso ao nó Drupal, que é um assunto enorme.

O suporte interno do núcleo para controle de acesso ao nó é bastante claro e, para controlar o acesso para visualizar um nó por função, você deve usar algum tipo de módulo de controle de acesso ao nó. Há uma página no Drupal.org listando todos os módulos de acesso ao nó , com uma análise de cápsula de cada um. Sugiro que você dê uma olhada nessa página para ver se encontra um módulo adequado para controlar o acesso.

O módulo Flexi Access parece ser o módulo que mais se aproxima dos seus requisitos, pois sua principal função é permitir que você controle o acesso de usuários individuais, e não por função ou termo de taxonomia.

É um pequeno módulo que permite configurar ACLs (listas de controle de acesso) para usuários individuais. É basicamente uma interface de usuário para o módulo ACL , então você precisa instalá-lo também.

Ele não possui alguns dos recursos dos módulos de controle de acesso mais avançados, como o Content Access , mas é mantido ativamente e atualmente não há bugs abertos na fila de problemas.

Divulgação: Eu sou o mantenedor do Flexi Access.

Radical livre
fonte