Как пересоздать права доступа к отдельно взятой ноде?

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

Аватар пользователя Alex_R Alex_R 25 февраля 2011 в 15:33

Как заставить систему, если у ноды не определены права доступа, их создать при попытке обращения к этой ноде?
Был вариант запустить функцию node_access_acquire_grants($node), но как я понимаю без доступа к ноде она не отрабатывает, а если права не определены, то доступ получается запрещен для всех кроме USER1... И где можно оформить ее вызов? Или есть другой вариант?
Заранее спасибо!

Комментарии

Аватар пользователя vgoodvin vgoodvin 25 февраля 2011 в 16:16

По умолчанию открываем доступ для всех новых нод.

Потом

function my_module_init() {
  if ($node = menu_get_object()) {
    if (/* Первое обращение к ноде */) {
      // Определяем права доступа к ноде для текущего пользователя
      ...

      node_access_acquire_grants($node);
      cache_clear_all();

      if (/* Если нода недоступна пользователю */) {
        drupal_access_denied();
      }
    }
  }
}

Аватар пользователя Alex_R Alex_R 25 февраля 2011 в 16:47

Спасибо! А можно чуть подробнее как

"vgoodvin" wrote:

По умолчанию открываем доступ для всех новых нод.

Если в таблице node_access пишем строку
0 0 all 1 0 0
то это для всех нод, и все остальные условия игнорируются (или я не прав?)
а как сделать, чтобы только для тех у которых не прописаны условия?

Аватар пользователя vgoodvin vgoodvin 25 февраля 2011 в 18:05

После того как нода создана не трогаем права доступа к ней до тех пор пока к ней кто-либо не обратится. Как это лучше реализовать в Вашем случае я не знаю.

Аватар пользователя vgoodvin vgoodvin 25 февраля 2011 в 18:06

просто не задавайте в начале на ноду никаких особых прав и откройте её для чтения всем кому нужно (возможно на странице permissions).

Аватар пользователя Alex_R Alex_R 26 февраля 2011 в 8:49

vgoodvin wrote:
просто не задавайте в начале на ноду никаких особых прав и откройте её для чтения всем кому нужно (возможно на странице permissions).

На странице permissions - на эту тему есть только одна галочка "доступ к содержанию сайта" но ее действие подменяется для конкретной ноды, берущееся из таблицы node_access.
У меня получается ситуация, что если в таблице node_access про данную ноду ничего не написано, то доступ к ней запрещен, это возможно как то изменить, чтобы по умолчанию доступ на просмотр был разрешен?

Аватар пользователя Alex_R Alex_R 25 февраля 2011 в 18:27

У меня ситуация в том, что мультисайтинг и нода создается и открывается не обязательно на своем сайте. Таблица node_access естественно для каждого сайта своя. Есть свой модуль, который пишет права по нужным мне условиям. После глобального обновления прав доступа все работает на всех сайтах, после добавления новой ноды к ней права добавляются только на родительском сайте, а на остальных она получается недоступной (до обновления прав доступа). Я пытаюсь сделать чтобы права обновлялись на всех, но не понимаю как это сделать Sad

Аватар пользователя Alex_R Alex_R 26 февраля 2011 в 16:45

Обидно!
Если я правильно разобрался, то система доступа к нодам в друпале под мои нужды совершенно не подходит Sad И строить доступ к нодам при мультисайтинге стандартными средствами нереально. Sad

По логике Друпала получается, что в таблице node_access обязательно должно быть прописано разрешение к ноде и если его нет, то изменить это может только тот, кто имеет доступ к этой ноде, а поскольку там про данную ноду нет ничего, то только user1.

Придется писать полностью свой доступ, поскольку мне надо чтобы таблица выполняющая функции node_access была не таблицей разрешений, а таблицей запрещений, т.е. если в ней ничего про конкретную ноду нет, то доступ к ней разрешен всем...

Очень жаль...