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?