Làm thế nào người dùng chỉ có thể truy cập một nút cụ thể và không phải tất cả các nút thuộc loại đó?


10

Tôi có một người dùng có quyền xem và chỉnh sửa một loại nội dung cụ thể. Điều này cung cấp đặc quyền cho tất cả người dùng để xem và chỉnh sửa tất cả các nút của loại đó. Nhưng thực ra, tôi muốn tạo cho mỗi người dùng một nút duy nhất để chỉ người dùng đó có thể xem và chỉnh sửa nó. Làm thế nào tôi có thể làm điều này trong Drupal 7?


1
Bạn có nghĩa là làm thế nào bạn có thể làm điều đó bằng cách sử dụng một mô-đun, hoặc làm thế nào bạn có thể làm điều đó bằng cách viết mã cần thiết?
kiamlaluno

Một cách khác là từ chối nút sử dụng và mở rộng hồ sơ người dùng theo các trường.
ya.teck

Có vẻ như nút này trên mỗi người dùng có thể đáp ứng một số loại yêu cầu hồ sơ người dùng. Nó có phải là một nút riêng biệt không, hoặc sẽ không tốt hơn nếu mở rộng chính thực thể người dùng với các trường bổ sung?
Alfred Armstrong

Drupal 7 loại bỏ quyền xem nút cho mỗi người dùng. Bạn có thể mang chúng trở lại với mô-đun này drupal.org/project/node_view_permissions
giorgio79

sử dụng mô-đun liên kết "gật đầu" là drupal.org/project/nodeaccess tôi ước nó sẽ giúp bạn
Mahipal Purohit

Câu trả lời:


11

Sử dụng một mô-đun hiện có, bạn có thể làm điều đó với Content Access , điều này (khi được sử dụng cùng ACL ) cho phép đặt quyền truy cập một nút cho mỗi người dùng.
Điều này có nghĩa là bạn cần đặt quyền truy cập theo cách thủ công cho mỗi nút.

Nếu bạn tự tạo các nút, và sau đó bạn muốn chắc chắn rằng chỉ người dùng được đặt làm chủ sở hữu của nút mới có thể xem (và chỉnh sửa) nó, thì bạn có thể tạo mô-đun tùy chỉnh (có nghĩa là mô-đun được sử dụng cho trang web của bạn) và triển khai hook_node_access()như sau (mã đã được viết để dễ đọc hơn):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Sử dụng triển khai hook này, bạn không cần chỉnh sửa thủ công các quyền truy cập được cung cấp cho từng nút của loại nội dung mà bạn tạo. Thay đổi chủ sở hữu của nút cũng sẽ dễ dàng hơn, vì bạn không cần thay đổi quyền truy cập của nút đó; mã sẽ tự động cấp cập nhật và xem quyền cho người dùng được đặt làm chủ sở hữu (hoặc tác giả) của nút.


5

Bạn không cần bất kỳ mô-đun đặc biệt hoặc mã tùy chỉnh để làm điều này. Chỉ cần tạo thủ công các nút đó, đặt người dùng thích hợp làm chủ sở hữu (tác giả) của các nút và đặt quyền cho loại nội dung này để chỉ chỉnh sửa nội dung (không chỉnh sửa bất kỳ nội dung nào thuộc loại này) và bạn đã hoàn tất.


1

Những gì bạn đang nói là kiểm soát truy cập nút Drupal, một chủ đề rất lớn.

Hỗ trợ tích hợp của lõi cho điều khiển truy cập nút là điều tất nhiên và để kiểm soát truy cập để xem nút theo vai trò, bạn phải sử dụng một số loại mô-đun điều khiển truy cập nút. Có một trang tại Drupal.org liệt kê tất cả các mô-đun truy cập nút , với một đánh giá viên nang của từng mô-đun . Tôi đề nghị bạn hãy xem trang đó để xem liệu bạn có thể tìm thấy một mô-đun phù hợp để kiểm soát truy cập hay không.

Các Flexi truy cập mô-đun có vẻ là các mô-đun đó là trận đấu gần nhất với yêu cầu của bạn, vì nó chức năng chính là để cho bạn kiểm soát truy cập cho người dùng cá nhân, chứ không phải bởi vai trò hoặc bằng cách hạn phân loại.

Đây là một mô-đun nhỏ cho phép bạn thiết lập ACL (danh sách kiểm soát truy cập) cho từng người dùng. Về cơ bản, nó là một giao diện người dùng cho mô-đun ACL , vì vậy bạn cũng cần phải cài đặt nó.

Nó thiếu một số tính năng của các mô-đun kiểm soát truy cập nâng cao hơn, chẳng hạn như Truy cập nội dung , nhưng nó được duy trì tích cực và hiện không có lỗi mở trong hàng đợi vấn đề.

Tiết lộ: Tôi là người duy trì truy cập Flexi.

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.