Jak mogę pozwolić użytkownikom na cofanie publikacji i publikowanie własnych treści?

30

Chcę umożliwić użytkownikom cofanie publikacji i publikowanie własnych treści. Domyślnie musisz zezwolić użytkownikom na administrowanie węzłami, aby mogli cofnąć publikację lub opublikować zawartość. To jednak droga do szerokiej. Chcę pozwolić użytkownikom cofnąć publikację lub opublikować węzeł tylko wtedy, gdy go utworzyli. Oznacza to również, że powinni mieć możliwość przeglądania niepublikowanych węzłów, jeśli tylko je utworzyli.

Chaulky
źródło

Odpowiedzi:

20

Podejściem interfejsu użytkownika, którego użyłem w niektórych witrynach, jest moduł Override Node Options , który dodaje uprawnienia podobne do tych, które zapewnia moja inna odpowiedź, oraz kilka dodatkowych.

Odszyfrować
źródło
To wydaje się być najprostsze podejście ... i obecnie działa dla mnie. Dzięki!
Chaulky,
Jest to najlepsze, ponieważ możesz zezwolić na publikowanie i przyklejanie bez administrowania węzłami :)
Alex Weber
Wygląda na świetny moduł do rozwiązania tego problemu.
zilverdistel
20

Zawsze używamy do tego modułu Publikuj treść . Dodaje szereg drobiazgowych uprawnień i kartę publikowania / cofania publikacji w węzłach.

Ten moduł

  • umożliwia szczegółowe publikowanie i cofanie uprawnień:
    • globalny (cofnij / opublikuj dowolną treść)
    • na „typ węzła” (usuń / opublikuj dowolną treść [typ węzła])
    • na użytkownika (cofnij / opublikuj własną [typ węzła]
  • dodaje zakładkę „Publikuj / Cofnij publikację” do strony węzła w celu cofnięcia / opublikowania jednym kliknięciem.
  • udostępnia linki publikowania / cofania publikacji do twoich widoków, ułatwiając w ten sposób usprawnienie przepływu pracy dla recenzentów, redaktorów i wydawców.
  • jest lekki i zawsze będzie.
marcvangend
źródło
9

Polecam korzystanie z modułu rewizji, który daje kilka korzyści w stosunku do powyższych metod. Jednym z nich jest oczywiście to, że jest to w pełni utrzymany moduł, dlatego będzie dużo uwagi na temat kodu i mnóstwo poprawek błędów. Po drugie, otrzymasz więcej funkcji, aby dopasować to do ogólnego przepływu pracy.

W twoim przypadku daje użytkownikom zarówno uprawnienia „twórcy”, jak i „moderatora”, aby mogli w zasadzie moderować własne treści, ale jak napisano w opisie modułu, nie otrzymują boskich mocy, takich jak dawanie „ administracja węzłów dałaby.

coderintherye
źródło
To bardzo interesująca opcja, ale jest o wiele więcej niż potrzebuję. Pomyślałem, że cieszę się, że wiem o tym, wiem, ale mogę wymyślić kilka innych stron, które by się przydały.
Chaulky
6

Jest moduł, który to robi, ale nie pamiętam dokładnie nazwy. Wydawało mi się, że podejście zastosowane przez moduł było zbyt kłopotliwe, miało dużo kodu, podczas gdy faktyczny ważny kod był tak naprawdę tylko jedną linią owiniętą logiką uprawnień.

To jest moja wersja kodu:

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

Dodaje to kilka dodatkowych uprawnień, które pozwalają użytkownikom publikować / cofać publikację własnych lub wszystkich typów treści, a wszystkie typy zawartości określają, jak chcesz.

Odszyfrować
źródło
Dzięki, to wygląda całkiem nieźle, ma sens. A co z możliwością przeglądania ich niepublikowanych treści? Jeśli nie mogą go wyświetlić, w jaki sposób opublikuje to?
Chaulky,
Nie powinno to wpływać na to, że IIRC użytkownik może zobaczyć swoją nieopublikowaną treść niezależnie od tego, czy ma „administrować węzłami”.
Odszyfruj
3

Chcę tylko zaktualizować Odszyfruj odpowiedź, która według mnie jest najlepszym podejściem, jeśli nie chcesz dodawać kolejnego modułu, aby pasował do Drupala 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');
}
anou
źródło
jest literówka. zmień $ perms_type na $ perm_types - plus status dowolny / własny nie jest sprawdzany ..
rem
0

Możesz to osiągnąć, łącząc moc modułów Flag i Rules .

  1. Utwórz nową flagę Opublikuj i zezwól użytkownikom na oflagowanie tylko własnych treści.
  2. Następnie dodaj nową regułę, która uruchamia się, gdy węzeł jest oflagowany i publikuje oznaczony węzeł. Podobnie utwórz drugą regułę, która cofnie publikację węzłów, które nie są oznaczone jako Publikuj .
  3. Na koniec daj użytkownikom uprawnienia do wyświetlania własnych niepublikowanych węzłów i dodaj łącze Publikuj do stron węzła.
Jeroen
źródło
-1

Dostęp do treści Moduł powinien obejmować co chcesz.

Ten moduł umożliwia zarządzanie uprawnieniami do typów treści według roli i autora. Pozwala określić niestandardowe uprawnienia do wyświetlania, edycji i usuwania dla każdego typu zawartości. Opcjonalnie możesz włączyć ustawienia dostępu do zawartości, aby dostosować dostęp do każdego węzła treści.

Jeremy French
źródło
1
Trochę niejasna odpowiedź. Jeśli jest to lepsze niż odpowiedź Deszyfrowania, może mógłbyś rozwinąć zalety tego podejścia?
Chris Cohen,
Moduł dostępu do treści tak naprawdę nie rozwiązuje problemu, dodaje możliwość ustawiania Wyświetl, Edytuj i Usuń według roli, ale nie Publikuj.
Odszyfruj