Xem nội dung chưa được công bố Cấp phép cho người không phải là tác giả


18

Tôi đã tìm hiểu một chút để xem liệu có cách nào cho phép người dùng đăng nhập (nhưng không phải quản trị viên) xem nội dung chưa được công bố (được đánh dấu bằng lớp không được xuất bản nút CSS). Điều này dường như chỉ được lên kế hoạch cho Drupal 8. Nhưng có lẽ ai đó đủ thông minh để làm một cách giải quyết?

Tôi có một vai trò được đặt tên Content Editorđể có thể xem tất cả nội dung chưa được công bố, bất kể họ có phải là tác giả hay không.

Câu trả lời:


17

Nếu bạn ổn khi viết một mô-đun tùy chỉnh rất nhỏ, bạn có thể sử dụng kết hợp hook_permission()hook_node_access()để làm điều này:

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

Bất kỳ vai trò nào bạn gán quyền mới bây giờ sẽ có thể xem bất kỳ nút nào, bất kể nó có được xuất bản hay không.


Để tăng cường bảo mật một chút mặc dù tôi đã thêm && user_access('administer nodes')để nó phụ thuộc vào quyền tạo nội dung. Bây giờ không phải là "vô điều kiện". Cảm ơn ví dụ!
Artur

Vâng tôi nên đề cập rằng bạn có thể muốn 'tăng cường' nó lên một chút :) rất vui khi được giúp đỡ
Clive

công cụ tuyệt vời một lần nữa, Clive. Điều này cũng giải quyết một trong những vấn đề của tôi để hạn chế quyền truy cập vào các nút có thuật ngữ phân loại nhất định !!!
uwe

1
Mã thực sự là "xem vô điều kiện bất kỳ nội dung". Nó không bao giờ kiểm tra xem nút có được xuất bản hay không. Hoặc nếu vai trò có quyền xem nội dung ở vị trí đầu tiên.
JM01

6

Lần đầu tiên tôi thử mã ở trên, điều này thật tuyệt. Nhưng sau khi trao quyền cho nội dung chưa được công bố cho một vai trò, vai trò đó vẫn không thể thấy nội dung chưa được công bố trong chế độ xem và điều này có thể rất hữu ích cho một số vai trò biên tập viên ...

Tôi đã giải quyết nó bằng mô-đun view_unpublished .


Tôi đã cài đặt plugin này và thay vì giải quyết vấn đề của mình, nó đã không & làm cho tất cả nội dung không được hiển thị cho nhóm Quản trị viên tùy chỉnh mà tôi đã tạo.
mohamad salama

Vâng, tôi xin lỗi bạn đã có hành vi như vậy. Tôi đã sử dụng nó được một thời gian và chưa bao giờ có pb như vậy với bất kỳ vai trò nào (nếu bạn muốn nói nhóm Quản trị viên của bạn là một vai trò). Bạn có thể đăng vấn đề trong DO sau đó.
Kojo

3

Tôi sử dụng mô-đun Sửa đổi cho việc này. Khi cài đặt, nó tạo các quyền sau cho từng loại nội dung:

  • Loại nội dung : Xem bản sửa đổi nội dung của riêng

  • Loại nội dung : Xem bản sửa đổi nội dung của bất kỳ ai

  • Loại nội dung : Xuất bản sửa đổi nội dung của riêng

  • Loại nội dung : Xuất bản bản sửa đổi nội dung của bất kỳ ai

Bằng cách cho phép các biên tập viên của tôi xem các bản sửa đổi nội dung của bất kỳ ai, họ có thể truy cập và xuất bản tất cả các nút đã được tạo bởi người dùng khác.


1

Đây là những gì tôi đã kết thúc ....

Nó tạo ra một 'xem bất kỳ quyền nội dung' cho từng loại nút. Nó khá giống với những gì mô-đun nút làm, nhưng thêm tùy chọn bổ sung.

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

1

Có một mô-đun cho Drupal 7 và Drupal 8 cho điều đó:

Xem_unpublished

Mô-đun này cho phép bạn cấp quyền truy cập cho các vai trò người dùng cụ thể để xem các nút chưa được công bố của một loại cụ thể. Kiểm soát truy cập là khá chi tiết về vấn đề này.


0

Tham khảo hướng dẫn Quản trị chính thức: https://drupal.org/node/1106606 mô-đun view_unpublished được đề xuất bởi Kojo là một giải pháp nhanh chóng và dễ dàng.


0

Cách giải quyết đơn giản, hợp lý là sử dụng cờ 'thăng hạng lên trang nhất trên các nút.

Nếu bạn không có cách sử dụng nào khác cho cờ này, hãy lọc các quan điểm của bạn về 'được thăng hạng lên trang nhất'. Trình chỉnh sửa nội dung của bạn có thể hoạt động trên nút trước khi nó được quảng bá (bằng cách sử dụng liên kết trực tiếp). Nhưng nó sẽ không xuất hiện cho khách truy cập trang web, có khả năng.

Chúng tôi lấy cảm hứng đó từ cách tiếp cận 'video chưa niêm yết' của Youtube.


0

Nếu bạn chỉ cần để xem nội dung trong một lần xem, vô hiệu hóa SQL rewritingtrong Query Settingsdưới Othertrong Views UI.

Điều này làm việc cho tôi vì tôi chỉ muốn người dùng có thể hủy bỏ nội dung chưa được công bố.

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.