it-swarm-vi.com

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ó

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 theo dõi." Ý định của tôi là chỉ cho phép người dùng có "Hàng tháng theo dõi" để xem các nút "Sách điện tử". Khi tôi xem các cài đặt quyền cho 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 của người đăng ký"?

17
John

Bạn cần cài đặt mô-đun Truy cập nội dung để 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.

13
iStryker

Đâ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);
}
5
ya.teck

Đố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;
}
5
Denis

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 nút thay vào đó.

2
Sam King

Với drupal 7, hãy thử cái này: Truy cập theo thuật ngữ

Cung cấp điều khiển truy cập nút phân cấp rất linh hoạt (điều khiển truy cập nội dung) cho D7.

1
washooo

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
ben.hamelin

Tôi quan tâm bằng cách sử dụng mô đun Quyền xem nút . 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.

enter image description here

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

  1. Sau khi cài đặt và bật, đi đến /admin/config/content/node-view-permissions và 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!

0
Chris Happy

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

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 thông thường Drupal.

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
batigolix