Izin "Lihat konten yang tidak dipublikasikan" untuk non-penulis

18

Saya mencari di Google sedikit untuk melihat apakah ada cara tingkat izin untuk memungkinkan pengguna yang masuk (tetapi non-admin) melihat konten yang tidak diterbitkan (ditandai dengan kelas CSS node-unpublished). Ini tampaknya hanya dijadwalkan untuk Drupal 8. Tapi mungkin seseorang cukup pintar untuk melakukan solusi?

Saya memiliki peran bernama Content Editoryang seharusnya dapat melihat semua konten yang tidak dipublikasikan, terlepas dari apakah mereka adalah penulis atau bukan.

Artur
sumber

Jawaban:

17

Jika Anda baik-baik saja menulis modul khusus yang sangat kecil, Anda dapat menggunakan kombinasi hook_permission()dan hook_node_access()untuk melakukannya:

function MYMODULE_permission() {
  return array(
    'unconditionally view unpublished content' => array(
      'title' => t('Unconditionally View Unpublished Content'),
      'restrict access' => TRUE
    )
  );
}

function MYMODULE_node_access($node, $op, $account) {
  // We're only bothered about the 'view' operation at the moment
  if ($op == 'view') {
    // If the user has access to our new permission, let 'em at it
    if (user_access('unconditionally view unpublished content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  // For everything else let the system decide.
  return NODE_ACCESS_IGNORE;
}

Setiap peran yang Anda berikan izin baru sekarang dapat dapat melihat simpul apa pun, terlepas dari apakah itu diterbitkan atau tidak.

Clive
sumber
Untuk memperkuat keamanan sedikit meskipun saya menambahkan && user_access('administer nodes')sehingga tergantung pada hak untuk membuat konten. Sekarang bukan itu "tanpa syarat". Terima kasih untuk contohnya!
Artur
Ya saya seharusnya menyebutkan Anda mungkin ingin 'menambahnya' sedikit :) senang membantu
Clive
hal-hal hebat lagi, Clive. Ini memecahkan salah satu masalah saya juga untuk membatasi akses ke node dengan istilah taksonomi tertentu !!!
uwe
1
Kode sebenarnya adalah "melihat tanpa syarat konten apa pun". Tidak pernah memeriksa untuk melihat apakah node diterbitkan atau tidak. Atau jika peran memiliki izin untuk melihat konten di tempat pertama.
JM01
6

Saya pertama kali mencoba kode di atas, yang hebat. Tetapi setelah memberikan hak ke konten yang tidak diterbitkan untuk suatu peran, peran itu masih tidak dapat melihat konten yang tidak dipublikasikan dalam tampilan, dan ini bisa sangat berguna untuk beberapa peran editor ...

Saya memecahkannya menggunakan modul view_unpublished .

Kojo
sumber
Saya menginstal plugin ini & bukannya menyelesaikan masalah saya, plugin ini tidak & membuat semua konten tidak ditampilkan untuk grup Admin khusus yang saya buat.
mohamad salama
Yah saya minta maaf Anda memiliki perilaku seperti itu. Saya telah menggunakannya untuk sementara waktu sekarang dan tidak pernah memiliki pb dengan peran apa pun (jika Anda maksudnya grup Admin Anda adalah sebuah peran). Anda dapat memposting masalah dalam DO lalu.
Kojo
3

Saya menggunakan modul Revisi untuk ini. Setelah instalasi, itu membuat izin berikut untuk setiap jenis konten:

  • Jenis konten : Lihat revisi konten sendiri

  • Jenis konten : Lihat revisi konten siapa pun

  • Jenis konten : Publikasikan revisi konten sendiri

  • Jenis konten : Publikasikan revisi konten siapa pun

Dengan memberikan editor saya izin untuk melihat revisi konten siapa pun, mereka dapat mengakses dan mempublikasikan semua node yang telah dibuat atau direvisi oleh pengguna lain.

Patrick Kenny
sumber
1

Inilah yang akhirnya saya buat ....

Itu menciptakan 'melihat semua izin konten' untuk setiap jenis simpul Ini hampir sama dengan apa yang dilakukan modul simpul, tetapi menambahkan opsi tambahan.

/**
 * Implements hook_permission().
 */
function MODULE_permission() {
  $perms = array();
  foreach (node_permissions_get_configured_types() as $type) {
    $info = node_type_get_type($type);
    $perms += array(
      "view $type content" => array(
        'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
      )
    );
  }
  return $perms;
}

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if (in_array($type, node_permissions_get_configured_types())) {
    if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  return NODE_ACCESS_IGNORE;
}
MTecknology
sumber
1

Ada modul untuk Drupal 7 dan Drupal 8 untuk itu:

View_unpublished

Modul ini memungkinkan Anda untuk memberikan akses untuk peran pengguna tertentu untuk melihat node yang tidak dipublikasikan dari jenis tertentu. Kontrol akses cukup terperinci dalam hal ini.

JeroenT
sumber
0

Mengacu pada panduan Administrasi resmi: https://drupal.org/node/1106606 modul view_unpublished yang disarankan oleh Kojo adalah solusi cepat dan mudah.

xaa
sumber
0

Solusi sederhana dan masuk akal adalah menggunakan bendera 'promosikan ke halaman depan' pada node.

Jika Anda tidak memiliki kegunaan lain untuk bendera ini, filter pandangan Anda pada 'dipromosikan ke halaman depan' Editor konten Anda dapat bekerja pada node sebelum dipromosikan (dengan menggunakan tautan langsung). Tapi itu belum muncul ke pengunjung situs, berpotensi.

Kami mendapat inspirasi dari pendekatan 'video tidak terdaftar' Youtube.

pengguna18099
sumber
0

Jika Anda hanya perlu melihat konten dalam tampilan, nonaktifkan SQL rewritingdi Query Settingsbawah Otherdi UI Tampilan.

Ini berfungsi untuk saya karena saya hanya ingin pengguna dapat membatalkan pembatalan konten yang tidak dipublikasikan.

Niall Murphy
sumber