Điểm:0

Thêm quyền truy cập vào một nút theo chương trình thông qua mô-đun ACL

lá cờ ng

Tôi đã dành một ngày để cố gắng tìm ra lý do tại sao mã của tôi không hoạt động. Tôi đang cố gắng thêm quyền truy cập cho người dùng trên một nút theo chương trình. Nó lưu bản ghi trong DB và khi tôi truy cập trang Kiểm soát truy cập cho một nút nhất định, người dùng được liệt kê trong DANH SÁCH KIỂM SOÁT TRUY CẬP TRUY CẬP CỦA NGƯỜI DÙNG. Tuy nhiên, khi tôi truy cập nút với tư cách là người dùng đó, tôi bị từ chối truy cập. Tôi đã thử tất cả các loại kết hợp nhưng mã hiện tại của tôi giống như thế này:

$node,$account = 'xuất phát từ logic trước đó, .irrelevant...';
$acl_id = content_access_get_acl_id($node, 'view');

$connection = Cơ sở dữ liệu::getConnection();
// kiểm tra bản ghi tồn tại!
$result = $connection->select('acl_user', 'au')
-> trường ('au')
->điều kiện('au.acl_id', $acl_id)
->điều kiện('au.uid', $account->id())
->thực thi();
$rows = $result->fetchAll();
if(trống($rows)) {
 $connection->insert('acl_user')
  -> trường([
  'acl_id' => $acl_id,
  'uid' => $account->id(),
 ])->thực thi();

 $settings = content_access_get_per_node_settings($course_node);
 //dpm($settings,'settings');
\Drupal::entityTypeManager()->getAccessControlHandler('node')->writeGrants($node);
\Drupal::moduleHandler()->invokeAll('user_acl', $settings);

$grants = \Drupal::moduleHandler()->invokeAll('node_access_records', [$node]);
\Drupal::moduleHandler()->alter('node_access_records', $grants, $node);


$node->save();
if(node_access_needs_rebuild()) {
  nút_access_rebuild();
  nút_access_needs_rebuild(SAI);
}

foreach (Cache::getBins() as $cache_backend) {
  $cache_backend->deleteAll();
}

Bất kỳ thông tin phản hồi?

Kevin avatar
lá cờ in
Đây là tất cả mã tùy chỉnh? Không có mô-đun đóng góp?
lá cờ ng
Đoạn mã trên hoàn toàn là tùy chỉnh, tuy nhiên chức năng cơ bản đến từ mô-đun acl. Nó hoạt động thông qua giao diện quản trị nhưng tôi cần thêm hoặc xóa quyền truy cập theo chương trình trong mã tùy chỉnh. Tôi nghĩ rằng tôi đang bỏ qua một số loại móc gây ra vấn đề của mình.
Kevin avatar
lá cờ in
Nó không hiển thị cách mã này được gọi
lá cờ ng
Nó được gọi từ bộ điều khiển nhưng tôi không nghĩ điều quan trọng là nó được gọi từ đâu.
Kevin avatar
lá cờ in
Điều quan trọng là nếu nó không hoạt động.

Đă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.