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

10

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?

Ek Kosmos
fuente
1
¿Quieres decir cómo puedes hacer eso usando un módulo, o cómo puedes hacer eso escribiendo el código necesario?
kiamlaluno
Otra forma es rechazar el nodo utilizando y ampliar el perfil de usuario por campos.
ya.teck
Parece que este nodo por usuario puede cumplir algún tipo de requisito de perfil de usuario. ¿Tiene que ser un nodo separado, o no sería mejor extender la propia entidad de usuario con campos adicionales?
Alfred Armstrong
Drupal 7 eliminó los permisos de vista de nodo por usuario. Puede traerlos de vuelta con este módulo drupal.org/project/node_view_permissions
giorgio79
use el enlace "nodeaccess" del módulo es drupal.org/project/nodeaccess ojalá le ayude
Mahipal Purohit

Respuestas:

11

Con un módulo existente, puede hacerlo con Content Access , que (cuando se usa junto con 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 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 de la hook_node_access()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.

kiamlaluno
fuente
5

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.

Petr Svehla
fuente
1

De lo que estás hablando es del control de acceso al nodo Drupal, que es un tema enorme.

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 una página en Drupal.org que enumera todos los módulos de acceso de nodo , con una revisión de 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 permitirle controlar 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 también debe instalarla.

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

Divulgación: soy el mantenedor de Flexi Access.

Radicales libres
fuente