Как заставить систему, если у ноды не определены права доступа, их создать при попытке обращения к этой ноде?
Был вариант запустить функцию node_access_acquire_grants($node), но как я понимаю без доступа к ноде она не отрабатывает, а если права не определены, то доступ получается запрещен для всех кроме USER1... И где можно оформить ее вызов? Или есть другой вариант?
Заранее спасибо!
Комментарии
По умолчанию открываем доступ для всех новых нод.
Потом
if ($node = menu_get_object()) {
if (/* Первое обращение к ноде */) {
// Определяем права доступа к ноде для текущего пользователя
...
node_access_acquire_grants($node);
cache_clear_all();
if (/* Если нода недоступна пользователю */) {
drupal_access_denied();
}
}
}
}
Спасибо! А можно чуть подробнее как
Если в таблице node_access пишем строку
0 0 all 1 0 0
то это для всех нод, и все остальные условия игнорируются (или я не прав?)
а как сделать, чтобы только для тех у которых не прописаны условия?
После того как нода создана не трогаем права доступа к ней до тех пор пока к ней кто-либо не обратится. Как это лучше реализовать в Вашем случае я не знаю.
просто не задавайте в начале на ноду никаких особых прав и откройте её для чтения всем кому нужно (возможно на странице permissions).
На странице permissions - на эту тему есть только одна галочка "доступ к содержанию сайта" но ее действие подменяется для конкретной ноды, берущееся из таблицы node_access.
У меня получается ситуация, что если в таблице node_access про данную ноду ничего не написано, то доступ к ней запрещен, это возможно как то изменить, чтобы по умолчанию доступ на просмотр был разрешен?
У меня ситуация в том, что мультисайтинг и нода создается и открывается не обязательно на своем сайте. Таблица node_access естественно для каждого сайта своя. Есть свой модуль, который пишет права по нужным мне условиям. После глобального обновления прав доступа все работает на всех сайтах, после добавления новой ноды к ней права добавляются только на родительском сайте, а на остальных она получается недоступной (до обновления прав доступа). Я пытаюсь сделать чтобы права обновлялись на всех, но не понимаю как это сделать
Обидно!
Если я правильно разобрался, то система доступа к нодам в друпале под мои нужды совершенно не подходит И строить доступ к нодам при мультисайтинге стандартными средствами нереально.
По логике Друпала получается, что в таблице node_access обязательно должно быть прописано разрешение к ноде и если его нет, то изменить это может только тот, кто имеет доступ к этой ноде, а поскольку там про данную ноду нет ничего, то только user1.
Придется писать полностью свой доступ, поскольку мне надо чтобы таблица выполняющая функции node_access была не таблицей разрешений, а таблицей запрещений, т.е. если в ней ничего про конкретную ноду нет, то доступ к ней разрешен всем...
Очень жаль...
Система разграничения прав доступа к контенту в друпале фиговая, согласен.