it-swarm-es.com

¿Cómo dejo que los usuarios cancelen la publicación y publiquen su propio contenido?

Quiero dejar que los usuarios no publiquen y publiquen su propio contenido. De manera predeterminada, debe otorgar permiso para "administrar nodos" para que los usuarios puedan publicar o publicar contenido. Sin embargo, esa es una forma amplia. Quiero permitir a los usuarios que no publiquen o publiquen un nodo si y solo si lo crearon. Esto también significa que deberían poder ver nodos no publicados si y solo si lo crearon.

30
Chaulky

Un enfoque de UI que he usado en algunos sitios es el módulo Override Node Options , agrega permisos similares a los que proporciona mi otra respuesta, más un montón adicional.

20
Decipher

Siempre usamos el módulo Publicar contenido para eso. Agrega una cantidad de permisos específicos y una pestaña de publicación/no publicación en los nodos.

Este modulo

  • permite permisos granulares de publicación y no publicación:
    • global (anular/publicar cualquier contenido)
    • por "tipo de nodo" (anular/publicar cualquier contenido [nodetype])
    • por usuario (anular/publicar contenido propio [tipo de nodo]
  • agrega una pestaña "Publicar/No publicar" a la página del nodo para deshacer/publicar con un clic.
  • expone enlaces de publicación/publicación a sus vistas, lo que facilita la agilización de los flujos de trabajo para revisores, editores y editores.
  • es ligero y siempre lo será.
20
marcvangend

Recomiendo usar Módulo de revisión que le brinda algunos beneficios sobre los métodos anteriores. Uno, por supuesto, es que es un módulo totalmente mantenido y, por lo tanto, habrá muchos ojos en el código y muchas correcciones de errores. Dos, obtendrá más funciones para adaptar esto a su flujo de trabajo general.

Para su caso de uso, otorga a sus usuarios los permisos de "creador" y de "moderador", para que puedan moderar básicamente su propio contenido, pero como se dice en la descripción del módulo, no son dado poderes divinos como dar 'administrar nodos' daría.

9
coderintherye

Hay un módulo que hace esto, pero no puedo recordar el nombre. De hecho, sentí que el enfoque que tomó el módulo era demasiado engorroso, tenía mucho código cuando el código importante real era solo una línea envuelta con alguna lógica de 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 agrega algunos permisos adicionales que le permiten permitir a los usuarios publicar/publicar su propio tipo de contenido o todo, y todos los tipos de contenido, establezcan cómo lo deseen.

6
Decipher

Solo quiero actualizar la respuesta de Decipher, la bruja me parece el mejor enfoque si no desea agregar otro módulo, que se ajuste 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');
}
3
anou

Puede lograr esto combinando el poder de los módulos Bandera y Reglas .

  1. Cree una nueva marca Publicar y otorgue a los usuarios permiso para marcar solo su propio contenido.
  2. A continuación, agregue una nueva regla que se active cuando se marque un nodo y que publique el nodo marcado. Del mismo modo, cree una segunda Regla que anule la publicación de nodos que no estén marcados en Publicar .
  3. Finalmente, otorgue a los usuarios permiso para ver sus propios nodos no publicados y agregue un enlace Publicar a las páginas del nodo.
0
Jeroen