Bagaimana saya membiarkan pengguna membatalkan publikasi dan mempublikasikan konten mereka sendiri?

30

Saya ingin membiarkan pengguna membatalkan publikasi dan mempublikasikan konten mereka sendiri. Secara default, Anda harus memberikan izin "kelola node" agar pengguna dapat membatalkan publikasi atau mempublikasikan konten. Itu adalah cara untuk melebar. Saya ingin membiarkan pengguna membatalkan publikasi atau menerbitkan simpul jika dan hanya jika mereka membuatnya. Ini juga berarti mereka harus dapat melihat node yang tidak dipublikasikan jika dan hanya jika mereka membuatnya.

Chaulky
sumber

Jawaban:

20

Pendekatan UI yang saya gunakan di beberapa situs adalah modul Override Node Options , menambahkan izin yang mirip dengan yang disediakan oleh jawaban saya yang lain, ditambah banyak tambahan.

Menguraikan
sumber
Ini tampaknya menjadi pendekatan paling sederhana ... dan saat ini bekerja untuk saya. Terima kasih!
Chaulky
Ini adalah yang terbaik karena Anda dapat mengizinkan publikasi & lengket tanpa mengelola node :)
Alex Weber
Sepertinya modul yang bagus untuk menangani masalah ini.
zilverdistel
20

Kami selalu menggunakan modul Konten Terbitkan untuk itu. Itu menambahkan sejumlah izin halus dan tab terbitkan / tidak diterbitkan pada node.

Modul ini

  • memungkinkan penerbitan granular dan izin publikasi:
    • global (batalkan / terbitkan konten apa pun)
    • per "tipe simpul" (batalkan / publikasikan konten [nodetype])
    • per pengguna (batalkan / publikasikan konten [nodetype] sendiri
  • menambahkan tab "Terbitkan / Batalkan publikasi" ke halaman simpul untuk sekali klik / publikasi.
  • mengekspos tautan terbitkan / terbitkan ke tampilan Anda, sehingga memudahkan untuk merampingkan alur kerja untuk pengulas, editor, dan penerbit.
  • ringan dan akan selalu.
marcvangend
sumber
9

Saya akan merekomendasikan menggunakan Modul Revisi yang memberi Anda beberapa manfaat dari metode di atas. Salah satu tentu saja adalah itu adalah modul yang dipelihara sepenuhnya dan dengan demikian akan ada banyak mata pada kode dan banyak perbaikan bug. Dua, Anda akan mendapatkan lebih banyak fitur untuk menyesuaikan ini ke dalam alur kerja keseluruhan Anda.

Untuk kasus penggunaan Anda, berikan kepada pengguna Anda izin "pencipta" dan izin "moderator", sehingga mereka pada dasarnya dapat memoderasi konten mereka sendiri, tetapi seperti yang dikatakan dalam deskripsi modul, mereka tidak diberi kekuatan seperti dewa seperti memberi ' kelola node akan memberi.

coderintherye
sumber
Ini adalah pilihan yang sangat menarik, tetapi ada jauh lebih banyak di sana daripada yang saya butuhkan. Pikir saya senang saya tahu tentang hal itu tahu, saya bisa memikirkan beberapa situs lain yang akan berguna.
Chaulky
6

Ada modul yang melakukan ini, tapi saya tidak ingat namanya. Saya benar-benar merasa bahwa pendekatan yang diambil modul itu terlalu rumit, itu memiliki banyak kode ketika kode penting sebenarnya hanya benar-benar satu baris dibungkus dengan beberapa logika izin.

Ini adalah versi kode saya:

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

Itu menambahkan beberapa izin tambahan yang memungkinkan Anda untuk mengizinkan pengguna untuk mempublikasikan / membatalkan publikasi mereka sendiri atau semua jenis konten, dan semua jenis konten, mengatur apa yang Anda inginkan.

Menguraikan
sumber
Terima kasih, itu terlihat cukup bagus, masuk akal. Bagaimana kalau bisa melihat konten yang tidak dipublikasikan? Jika mereka tidak bisa melihatnya, bagaimana mempublikasikannya?
Chaulky
Seharusnya tidak memengaruhi itu, IIRC pengguna dapat melihat konten yang tidak dipublikasikan apakah ada 'mengelola node' atau tidak.
Menguraikan
3

Saya hanya ingin memperbarui jawaban Penguraian, penyihir jahitan kepada saya pendekatan terbaik jika Anda tidak ingin menambahkan modul lain, agar sesuai untuk 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');
}
anou
sumber
ada salah ketik. ubah $ perms_type menjadi $ perm_types - ditambah status apa pun / sendiri tidak dicentang ..
rémy
0

Anda dapat mencapai ini dengan menggabungkan kekuatan modul Bendera dan Aturan .

  1. Buat Bendera Terbitkan yang baru dan beri pengguna izin untuk hanya menandai konten mereka sendiri.
  2. Selanjutnya, tambahkan Aturan baru yang memicu ketika node ditandai dan yang menerbitkan node ditandai. Demikian pula, buat Aturan kedua yang membatalkan publikasi node yang tidak diblokir di bawah Publikasi .
  3. Terakhir, beri pengguna izin untuk melihat node yang tidak dipublikasikan sendiri dan menambahkan tautan Publikasikan ke halaman node.
Jeroen
sumber
-1

The akses konten modul harus mencakup apa yang Anda inginkan.

Modul ini memungkinkan Anda untuk mengelola izin untuk jenis konten berdasarkan peran dan penulis. Ini memungkinkan Anda menentukan tampilan khusus, mengedit, dan menghapus izin untuk setiap jenis konten. Secara opsional, Anda dapat mengaktifkan per pengaturan akses konten, sehingga Anda dapat menyesuaikan akses untuk setiap node konten.

Jeremy French
sumber
1
Sedikit jawaban yang tidak jelas. Jika ini lebih baik daripada jawaban Decipher, mungkin Anda bisa menguraikan manfaat dari pendekatan ini?
Chris Cohen
Modul Akses Konten tidak benar-benar menyelesaikan masalah, ia menambahkan kemampuan untuk mengatur Lihat, Edit dan Hapus berdasarkan peran tetapi tidak Terbitkan.
Menguraikan