it-swarm-es.com

¿Cómo puede un usuario acceder solo a un nodo específico, y no a todos los nodos de ese tipo?

Tengo un usuario con derechos de visualización y edición para un tipo de contenido específico. Esto otorga el privilegio a todos los usuarios de ver y editar todos los nodos de ese tipo. Pero en realidad, quiero crear para cada usuario un nodo único, para que solo ese usuario pueda verlo y editarlo. ¿Cómo puedo hacer esto en Drupal 7?

10
Ek Kosmos

Usando un módulo existente, puede hacerlo con Acceso al contenido , que (cuando se usa junto ACL ) permite establecer los permisos para acceder a un nodo para cada usuario.
Esto significa que debe establecer los permisos de acceso manualmente para cada nodo.

Si crea manualmente los nodos, y luego desea asegurarse de que solo el usuario que está configurado como propietario del nodo pueda verlo (y editarlo), puede crear un módulo personalizado (lo que significa un módulo que es usado para su sitio) e implemente hook_node_access() de la siguiente manera (el código ha sido escrito para que sea más fácil de leer):

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;
}

Con esta implementación de enlace, no necesita editar manualmente los permisos de acceso otorgados para cada nodo de ese tipo de contenido que cree. Cambiar el propietario del nodo también sería más fácil, ya que no necesita cambiar los permisos de acceso de ese nodo; el código otorgaría automáticamente los permisos de actualización y visualización al usuario establecido como propietario (o autor) del nodo.

11
kiamlaluno

No necesita ningún módulo especial o código personalizado para hacer esto. Simplemente cree manualmente esos nodos, establezca los usuarios apropiados como propietario (autor) de los nodos y establezca permisos para este tipo de contenido para editar solo contenido propio (no edite ningún contenido de este tipo) y listo.

5
Petr Svehla

Lo que estás hablando es Drupal control de acceso de nodo, que es un tema muy importante.

El soporte integrado del núcleo para el control de acceso a los nodos es bastante claro, y para controlar el acceso para ver un nodo por rol, debe usar algún tipo de módulo de control de acceso a nodos. Hay un página en Drupal.org que enumera todos los módulos de acceso a nodos , con una revisión cápsula de cada uno. Le sugiero que eche un vistazo a esa página para ver si puede encontrar un módulo adecuado para controlar el acceso.

El módulo Flexi Access parece ser el módulo que más se acerca a sus requisitos, ya que su función principal es permitir usted controla el acceso para usuarios individuales, en lugar de por rol o por término de taxonomía.

Es un pequeño módulo que le permite configurar ACL (listas de control de acceso) para usuarios individuales. Básicamente es una interfaz de usuario para el módulo ACL , por lo que debe instalar eso también.

Carece de algunas de las características de los módulos de control de acceso más avanzados, como Acceso al contenido , pero se mantiene activamente y actualmente no hay errores abiertos en su cola de problemas.

Divulgación: soy el mantenedor de Flexi Access.

1
Free Radical