Доступ к узлам через profile_taxonomy
[#42674]Проблему[/#] с доступом к нодам без использования ролей решил. Хотя, возможно, не лучшем образом - с использованием [module=hook_node_grants] и [module=hook_node_access_records]. Минус - таблица node_access может очень сильно разрастись. Плюс - как оказалось, очень простая реализация). Полноценный модуль пока не дописан, поэтому выложу только реализацию упомянутых хуков.
$grants = array();
//Через api profile_taxonomy получаем словарь,
//термины которого ассоциированы с профилем
//и поле профиля к которому привязан словарь
$pt_assignments = profile_taxonomy_get_assignments();
//profile_taxonomy может работать с несколькими полями профиля,
//к которым привязаны разные словари, но мне пока нужно только одно такое поле.
//Поле назвал "profile_location", словарь "Регионы"(vid=1).
//Как освобожусь сделаю по-нормальному.
$field = $pt_assignments[0]->field;
$vid = $pt_assignments[0]->vid;
//Подгружаем в объект $account данные из профиля
profile_load_profile(&$account);
//Если в профиле есть данные о регионе пользователя
//пытаемся получить tid термина по vid и name. Если
//эти данные отсутствуют, этот модуль не предоставляет
//никакого доступа
if ($account->$field && $vid) {
$tid = db_result(db_query("SELECT tid FROM {term_data} WHERE (name='%s' AND vid=%d)", $account->$field, $vid));
} else {
return $grants;
}
//Идентификатор сеанса управления ресурсами узла (gid) для рег.представителей