¿Cómo puedo permitir a los usuarios despublicación y publicar sus propios contenidos?

drupal.stackexchange https://drupal.stackexchange.com/questions/193

  •  16-10-2019
  •  | 
  •  

Pregunta

Quiero que los usuarios despublicación y publicar sus propios contenidos. Por defecto, usted tiene que dar "para administrar nodos" permiso para que los usuarios puedan anular la publicación o publicar contenido. Esa es la forma de amplio sin embargo. Quiero que los usuarios despublicación o publicar un nodo si y sólo si ellos lo crearon. Esto también significa que debe ser capaz de ver los nodos no publicados si y sólo si ellos lo crearon.

¿Fue útil?

Solución

Un enfoque de interfaz de usuario que he utilizado en algunos sitios es la Invalidar módulo Opciones de nodo , añade permisos similares a los que mi otro respuesta proporciona, además de un montón adicional.

Otros consejos

Publicar contenido para eso. Se añade un número de permisos de grano fino y una publicación / pestaña despublicación en los nodos.

Este módulo

  • permite granular publicar y permisos UNPUBLISH:
    • mundial (UN / publicar cualquier contenido)
    • por "tipo de nodo" (un / publicar cualquier contenido [NodeType])
    • por usuario (UN / publicar contenidos propios [NodeType]
  • añade una pestaña "Publicar / Despublicar" a la página de nodo para un solo clic de un / publicación.
  • expone publican / enlaces a anular la publicación de sus puntos de vista, por lo que es fácil de flujos de trabajo para agilizar los revisores y editores.
  • Es ligero y siempre lo será.

Me gustaría recomendar el uso de la Revisioning Módulo que le da un par de ventajas sobre los métodos anteriores. Uno, por supuesto, es que es un módulo totalmente mantenida y por lo tanto habrá un montón de ojos en el código y un montón de correcciones de errores. Dos, obtendrá más características para adaptarse a esto en su flujo de trabajo general.

En su caso de uso, da a sus usuarios tanto los permisos "creador" y los permisos "moderador", por lo que básicamente pueden moderar su propio contenido, pero como dice en la descripción del módulo, que son no como un dios determinado potencias como dando 'para administrar nodos' daría.

Hay un módulo que hace esto, pero no puedo recordar bien el nombre. De hecho me sentí que el enfoque del módulo tomó era demasiado engorroso, que tenía una gran cantidad de código cuando el código de importancia real era en realidad sólo una línea envuelto con cierta lógica permiso.

Esta es mi versión del código:

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

Eso añade algunos permisos adicionales que le permiten a los usuarios publicar / despublicación su propia o la totalidad de un tipo de contenido, y todos los tipos de contenido, determine cuánto desea.

Sólo quiero actualizar respuesta descifrar, costuras bruja para mí el mejor enfoque si no desea añadir otro módulo, para adaptarse a Drupal 7:

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

Se puede lograr esto mediante la combinación de la potencia de la Bandera y módulos Reglas

  1. Crear una nueva bandera Publicar y dar a los usuarios permiso para única bandera de su propio contenido.
  2. A continuación, agregar una nueva regla que se dispara cuando se marca un nodo y que publica el nodo señalado. Del mismo modo, crear una segunda regla que unpublishes nodos que están bajo sin bandera Publicar .
  3. Por último, dar a los usuarios permiso para ver sus propios nodos no publicados y añadir un publicar enlace a las páginas del nodo.
scroll top