Помогите разобраться с node_access (hook_node_access_records и hook_node_grants) в Drupal 7

Главные вкладки

Аватар пользователя long.skinny.boy long.skinny.boy 19 июля 2022 в 13:14

Добрый день, запутался с принципом работы таблицы доступа в D7

Имеется сайт на D7, с установленным модулем Organic Groups,
создаю несколько групп и включаю в них пользователей.

После чего создаю тип материала как контент группы. И создаю тестовую ноду, в которой указываю,
что она является например контентом Group One (в типе материала указано, что весь материал будет доступен только участникам)

Таким образом получаю ноду которая доступна на просмотр только участникам, в результате в таблице node_access появляется строка

nid | gid | realm          | grant_view | grant_update | grant_delete
1   | 33  | og_access:node | 1          | 0            | 0

И вот теперь задача, то что нужно определенной роли на сайте также дать доступ на просмотр, даже не смотря на то, участник он этой группы или нет, т.е. получается ещё одна строка должна появится в node_access

Для этого в своём модуле пишу:

<?php
 
/**
 * Implements hook_node_access_records().
 */
function mymodule_node_access_records($node) {

  

$grants = array();

  if (

$node->type === 'sample_type') {
    
$grants[] = array(
    
'realm' => 'mymodule_myrealm',
    
'gid' => 0,
    
'grant_view' => 1,
    
'grant_update' => 0,
    
'grant_delete' => 0,
    
'priority' => 5,
  );
}

return 

$grants;
}

/**
 * Implements hook_node_grants().
 */
function mymodule_node_grants($account$op) {
  
$grants = array();    

  if (

in_array('some_role'$account->roles)) {
    
$grants['mymodule_myrealm'][] = array(0);
  }
 
 return 
$grants;
}
?>

Ожидаю, что в данном случае появится ещё одна строка в node_access, типа следующего

nid | gid | realm            | grant_view | grant_update | grant_delete
1   | 33  | og_access:node   | 1          | 0            | 0
1   | 0   | mymodule_myrealm | 1          | 0            | 0

А получаю это

nid | gid | realm            | grant_view | grant_update | grant_delete
1   | 0   | mymodule_myrealm | 1          | 0            | 0

Т.е. как будто мой хук перезатёр действия модуля Organic groups