it-swarm-id.com

Batasi peran mana yang dapat melihat simpul berdasarkan jenis kontennya

Saya menggunakan Drupal 7 dan saya membuat jenis konten baru yang disebut "eBuku," dan saya membuat peran baru yang disebut "MonthlySubscriber." Maksud saya adalah hanya mengizinkan pengguna dengan "MonthlySubscriber" untuk melihat node "eBook". Ketika saya melihat pengaturan izin untuk sebuah peran, saya melihat kotak centang yang memungkinkan untuk membuat, mengedit, dan menghapus node dari jenis konten itu, tetapi tidak ada kotak centang untuk melihat node.

Bagaimana cara membatasi pengguna yang dapat melihat node "eBook" hanya untuk pengguna dengan peran "MonthlySubscriber"?

17
John

Anda perlu menginstal Akses Konten modul untuk menambahkan kontrol akses ini.

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.

13
iStryker

Berikut adalah cara sederhana melindungi halaman simpul (node ​​/ NID) dari pengguna yang tidak memiliki hak.

/**
 * Implements hook_menu_alter().
 */
function mymodule_menu_alter(&$items) {
  $items['node/%node']['access callback'] = 'mymodule_check_node_access';
}

/**
 * Determines whether the current user may perform the operation on the node.
 */
function mymodule_check_node_access($op, $node) {
  if ($node->type == 'protected_type' && !user_access('administer site configuration')) {
    return FALSE;
  }
  return node_access($op, $node);
}
5
ya.teck

Untuk drupal 7, coba gunakan hook_node_access () :

/**
 * Implements hook_node_access().
 */
function YOURMODULE_node_access($node, $op, $account) {
  if (
    $node->type == 'ebook' &&
    $op == 'view' &&
    !in_array('MonthlySubscriber', $account->roles)
  ) { return NODE_ACCESS_DENY; }
  return NODE_ACCESS_IGNORE;
}
5
Denis

Akses Konten tidak berfungsi untuk pemasangan Drupal 7 saya, jadi saya menggunakan Izin Node View sebagai gantinya.

2
Sam King

Untuk drupal 7, coba yang ini: Access by Term

Menyediakan kontrol akses simpul yang sangat fleksibel dan hierarkis (kontrol akses konten), untuk D7.

1
washooo

Solusi hook_menu_alter yang diposting di atas oleh ya.teck tidak berfungsi, tetapi konflik dengan hook_node_access standar dalam nama fungsinya. hook_menu_alter tidak diperlukan dalam kasus ini, jadi jawaban yang diposting oleh Denis di atas menurut saya lebih akurat dan cara yang tepat. Mengubah menu_item seperti yang dilakukan adalah contoh yang direferensikan pertama dapat dihancurkan oleh modul lain lebih jauh ke bawah pipa.

0
ben.hamelin

Saya perfer menggunakan modul Izin Node View . Lebih sederhana dari modul Akses Konten.

Seperti di D6, itu menambahkan izin "Lihat konten apa saja" dan "Lihat konten sendiri" untuk semua jenis konten yang Anda pilih.

enter image description here

Langkah-langkah untuk diikuti:

  1. Setelah menginstal dan mengaktifkan, buka /admin/config/content/node-view-permissions dan pilih jenis konten yang ingin Anda batasi aksesnya.
  2. Lalu, buka /admin/people/permissions#module-node_view_permissions dan pilih peran yang Anda inginkan untuk dapat melihat konten. Simpan izin.

    Selesai!

0
Chris Happy

Saya menggunakan potongan kode yang ditemukan dalam dokumentasi api D7 untuk hook_node_access hook .

Kode ini akan memberikan akses untuk melihat konten "ebook" kepada pengguna yang memiliki izin "lihat ebook".

Anda memerlukan izin baru untuk mengontrol akses dengan menerapkan hook_permission ().

/**
 * Implements hook_permission().
 */
function mymodule_permission() {
  return array(
    'view ebook' => array(
      'title' => t('View Ebook'),
      'description' => t('View Ebook nodes.'),
    ),
  );
}

Dengan menerapkan hook_node_access () Drupal dapat memberikan atau menolak akses ke node.

/**
 * Implements hook_node_access().
 */
function mymodule_node_access($node, $op, $account) {

  // Checks for an ebook node in view mode.
  if (is_object($node) && $node->type === 'ebook' && $op === 'view') {

    // Grants permission to view the node if the current user has an role
    // with the permission 'view ebook'.
    if (user_access('view ebook')) {
      return NODE_ACCESS_ALLOW;
    }

    // Otherwise disallows access to view the node.
    return NODE_ACCESS_DENY;
  }
  // For all other nodes and other view modes, don't affect the access.
  return NODE_ACCESS_IGNORE;
}

Izin lain (edit, hapus, dll) dapat ditangani melalui izin normal Drupal.

Secara opsional, Anda dapat menghapus konten dari tinjauan admin dengan menerapkan hook_query_TAG_NAME_alter.

/**
 * Implements hook_query_TAG_NAME_alter().
 */
function mymodule_query_node_admin_filter_alter(QueryAlterableInterface $query) {
  if (!user_access('view ebook')) {
  $query->condition('n.type', 'ebook', '!=');
  }
}
0
batigolix