it-swarm-eu.dev

Jak nechám uživatele publikovat a publikovat svůj vlastní obsah?

Chci uživatelům umožnit publikování a publikování vlastního obsahu. Ve výchozím nastavení musíte uživatelům udělit oprávnění „spravovat uzly“, aby mohli publikovat nebo publikovat obsah. To je způsob, jak rozšířit ačkoli. Chci uživatelům umožnit publikování nebo publikování uzlu pouze tehdy, pokud jej vytvořili. To také znamená, že by měli mít možnost zobrazit nepublikované uzly pouze tehdy, pokud je vytvořili.

30
Chaulky

UI přístup, který jsem použil na některých webech, je modul Override Node Options , přidává oprávnění podobná těm, která poskytuje moje jiná odpověď, plus spoustu navíc.

20
Decipher

K tomu vždy používáme modul Publikovat obsah . Přidá řadu jemně zrnitých oprávnění a kartu publikování/publikování na uzlech.

Tento modul

  • umožňuje podrobné publikování a publikování oprávnění:
    • globální (zrušit/publikovat jakýkoli obsah)
    • na "typ uzlu" (odhlásit/publikovat jakýkoli obsah [uzel typu])
    • na uživatele (un/publikovat vlastní obsah [nodetype])
  • přidá kartu „Publikovat/Zrušit publikování“ na stránku uzlu pro jedno kliknutí a zrušit publikování.
  • vystavuje publikování/publikování odkazů na vaše názory, což usnadňuje zefektivnění pracovních postupů pro recenzenty, editory a vydavatele.
  • je lehký a vždy bude.
20
marcvangend

Doporučil bych použít Revisioning Module , který vám poskytne několik výhod oproti výše uvedeným metodám. Jedním z nich je samozřejmě to, že se jedná o plně udržovaný modul, a proto na kód bude spousta očí a spousta oprav chyb. Za druhé, získáte více funkcí, které se hodí do vašeho celkového pracovního postupu.

Pro váš případ použití dává uživatelům oprávnění „tvůrce“ i oprávnění „moderátora“, aby mohli v podstatě moderovat svůj vlastní obsah, ale jak je uvedeno v popisu modulu, nejsou dané mocnosti podobné Bohu, jako by dávaly „spravující uzly“.

9
coderintherye

Existuje modul, který to dělá, ale nemůžu si úplně vzpomenout na jméno. Vlastně jsem měl pocit, že přístup, který použil modul, byl příliš těžkopádný, měl hodně kódu, když skutečný důležitý kód byl opravdu jen jeden řádek zabalený s nějakou logikou povolení.

Toto je moje verze kódu:

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

To přidává několik dalších oprávnění, která vám umožní umožnit uživatelům publikovat/publikovat jejich vlastní nebo všechny typy obsahu a všechny typy obsahu a nastavit, jak si přejete.

6
Decipher

Chci jen aktualizovat odpověď Decipher, čarodějnické švy mi nejlepší přístup, pokud nechcete přidat další modul, aby se vešly 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

Toho lze dosáhnout kombinací síly modulů Flag a Rules .

  1. Vytvořte nový příznak Publikovat a udělte uživatelům oprávnění označovat pouze svůj vlastní obsah.
  2. Dále přidejte nové pravidlo, které se spustí, když je uzel označen a který publikuje označený uzel. Podobně vytvořte druhé pravidlo, které zruší publikování uzlů, které nejsou uvolněny v Publikovat .
  3. Nakonec udělejte uživatelům povolení k prohlížení jejich vlastních nepublikovaných uzlů a přidejte odkaz Publikovat na stránky uzlu.
0
Jeroen