Giới hạn vai trò nào có thể xem một nút dựa trên loại nội dung của nó


18

Tôi đang sử dụng Drupal 7 và tôi đã tạo một loại nội dung mới gọi là "Sách điện tử" và tôi đã tạo một vai trò mới có tên là "Hàng tháng." Ý định của tôi là chỉ cho phép người dùng có "Người đăng ký hàng tháng" xem các nút "Sách điện tử". Khi tôi xem các cài đặt quyền cho một vai trò, tôi thấy các hộp kiểm cho phép tạo, chỉnh sửa và xóa các nút của loại nội dung đó, nhưng không có hộp kiểm để xem các nút.

Làm cách nào để giới hạn người dùng có thể xem các nút "Sách điện tử" chỉ ở những người dùng có vai trò "Hàng tháng theo dõi"?

Câu trả lời:


13

Bạn cần cài đặt mô-đun Content Access để thêm điều khiển truy cập này.

Mô-đun này cho phép bạn quản lý quyền cho các loại nội dung theo vai trò và tác giả. Nó cho phép bạn chỉ định chế độ xem tùy chỉnh, chỉnh sửa và xóa quyền cho từng loại nội dung.


5

Đối với drupal 7, hãy thử sử dụng 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;
}

1
Vui lòng tránh các câu trả lời chỉ có mã. Họ không phục vụ mục đích học tập. Ít nhất giải thích trong một hoặc ba câu chính xác mã này là một câu trả lời như thế nào? Làm thế nào nó hoạt động? tại sao nó hoạt động? Loại mô tả sẽ giúp người khác viết mã tương tự trong tình huống tương tự, thay vì hỏi đi hỏi lại.
Mołot

Đây phải là câu trả lời chính xác.
GrafiCode

5

Đây là một cách đơn giản để bảo vệ các trang nút (nút / NID) khỏi những người dùng không có đặc quyền.

/**
 * 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);
}

2
Lưu ý rằng việc sử dụng hook_node_accesssẽ không hoạt động với bất kỳ thứ gì "liệt kê" các nút, như Chế độ xem. Vì vậy, bạn có thể hạn chế quyền truy cập vào xem hook_node_access, nhưng truy vấn nút Xem hoặc nút tùy chỉnh vẫn có thể hiển thị nút đó cho người dùng. hook_node_accesshữu ích hơn cho kiểm soát biên tập, để kiểm soát các hoạt động tạo / cập nhật / xóa
Brian

Mã của bạn không hoạt động với tôi, nhưng bạn đã chỉ cho tôi đi đúng hướng. Tôi đã tìm thấy mã làm việc trên tài liệu hook_node_access api.drupal.org/api/drupal/modules%21node%21node.api.php/ Lỗi
Camilo

Đây là một ví dụ tồi vì nó sử dụng mymodule_node_access làm hàm tùy chỉnh trong khi Drupal cung cấp hook hook_node_access. Điều này có thể trở nên khó hiểu.
batigolix

@batigolix, như đã nêu trong câu trả lời, đó là một cách để bảo vệ các trang nút không phải là các nút.
ya.teck

2

Truy cập nội dung không hoạt động cho cài đặt Drupal 7 của tôi, vì vậy tôi đã sử dụng Quyền xem Node thay thế.



0

Giải pháp hook_menu_alter được đăng bởi ya.teck ở trên không hoạt động, nhưng xung đột với hook_node_access tiêu chuẩn trong tên hàm của nó. hook_menu_alter là không bắt buộc trong trường hợp này, và vì vậy câu trả lời được đăng bởi Denis ở trên theo ý kiến ​​của tôi chính xác hơn và đúng cách. Việc thay đổi menu_item như đã hoàn thành là ví dụ được tham chiếu đầu tiên có thể bị chặn bởi một mô-đun khác ở phía dưới đường ống.


0

Tôi đã sử dụng một đoạn mã được tìm thấy trong tài liệu api D7 cho hook hook_node_access .

Mã này sẽ cấp quyền truy cập để xem nội dung "ebook" cho người dùng có quyền "xem ebook".

Bạn cần một quyền mới để kiểm soát quyền truy cập bằng cách triển khai hook_ allow ().

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

Bằng cách triển khai hook_node_access () Drupal có thể cấp hoặc từ chối quyền truy cập vào nút.

/**
 * 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;
}

Các quyền khác (chỉnh sửa, xóa, v.v.) có thể được xử lý thông qua các quyền Drupal thông thường.

Theo tùy chọn, bạn có thể xóa nội dung khỏi tổng quan của quản trị viên bằng cách triển khai hook_queryiah_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

Tôi quan tâm bằng cách sử dụng mô-đun Node View Rights . Nó đơn giản hơn mô-đun Content Access.

Như trong D6, nó bổ sung quyền "Xem bất kỳ nội dung nào" và "Xem nội dung của riêng" cho bất kỳ loại nội dung nào bạn chọn.

nhập mô tả hình ảnh ở đây

Các bước để làm theo:

  1. Sau khi cài đặt và bật, hãy đi tới /admin/config/content/node-view-permissionsvà chọn loại nội dung mà bạn muốn giới hạn quyền truy cập.
  2. Sau đó, đi đến /admin/people/permissions#module-node_view_permissions và chọn các vai trò mà bạn muốn có thể xem nội dung. Lưu quyền.

    Làm xong!


cho drupal 8 "Quyền xem nút" không hoạt động
Karthikeyan Manivasagam

@KarthikeyanManivasagam Làm sao vậy?
Chris Chúc mừng

Chúng tôi đã sử dụng mô-đun này trong một trong các dự án của chúng tôi, nơi chúng tôi cần cung cấp quyền truy cập xem nội dung dựa trên vai trò và loại nội dung, nhưng nó không hoạt động. nó hoạt động giống như không sử dụng mô-đun này.
Karthikeyan Manivasagam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.