Điểm:0

Hạn chế quyền truy cập vào nút cụ thể theo vai trò

lá cờ jp

Tôi đang làm việc trên một dự án Drupal 9. Tôi cần hạn chế quyền truy cập vào nút có id 1083 cho vai trò người dùng "đại biểu". Đối với điều này tôi đã sử dụng hook_node_access_records()hook_node_grant():

/**
 * Triển khai hook_node_access_records().
 */
chức năng wtotfaf_user_node_access_records(NodeInterface $node) {
  $grant = [];
  if ($node->id() == 1083) {
    $grant[] = [
      'vương quốc' => 'delegate_view_activity_tracker',
      // Việc đặt tên cho vương quốc là tùy thuộc vào bạn.
      'gid' => 12,
      'cấp_view' => 1,
      'cấp_cập nhật' => 0,
      'cấp_xóa' => 0,
    ];
    $grant[] = [
      'vương quốc' => 'administrator_view_activity_tracker',
      // Việc đặt tên cho vương quốc là tùy thuộc vào bạn.
      'gid' => 11,
      'cấp_view' => 1,
      'cấp_cập nhật' => 1,
      'cấp_xóa' => 1,
    ];
    $grant[] = [
      'vương quốc' => 'editor_view_activity_tracker',
      // Việc đặt tên cho vương quốc là tùy thuộc vào bạn.
      'gid' => 13,
      'cấp_view' => 1,
      'cấp_cập nhật' => 1,
      'cấp_xóa' => 1,
    ];
  }
  trả lại $grant;
}

/**
 * Triển khai hook_node_grants().
 */
function wtotfaf_user_node_grants($account, $op) {
  $grant = [];
  $roles = $account->getRoles();
  if (in_array('quản trị viên', $roles)) {
    $grants['administrator_view_activity_tracker'] = [11];
  }
  otherif (in_array('delegate', $roles)) {
    $grants['delegate_view_activity_tracker'] = [12];
  }
  otherif (in_array('editor', $roles)) {
    $grants['editor_view_activity_tracker'] = [13];
  }
  trả lại $grant;
}

Trong db tôi có cái này: nhập mô tả hình ảnh ở đây

Nút có id 251 không khả dụng cho các vai trò khác sau khi tôi thay đổi. Điều gì là sai với mã? Làm cách nào tôi có thể hạn chế quyền truy cập đối với vai trò người dùng 'đại biểu' chỉ cho id nút 1083?

Kevin avatar
lá cờ in
Thay vào đó, bạn nên sử dụng một trong các mô-đun kiểm soát truy cập khác nhau
lá cờ in
Có vẻ như bạn muốn https://www.drupal.org/project/nodeaccess
Asatur Vardanyan avatar
lá cờ jp
Cảm ơn rất nhiều cho những lời đề nghị. Tôi đã sửa nó bằng các khoản trợ cấp. Tôi đã quên xây dựng lại quyền.
jbarrio avatar
lá cờ cn
Cá nhân tôi muốn dựa vào hook_node_access() sẽ mang đến cho bạn thực thể, hoạt động và Giao diện tài khoản. Dựa vào đó, tôi sẽ quay lại và tôi sẽ gọi cachePerPermissions() để đảm bảo điều này không làm chậm bất kỳ thứ gì.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.