Как ограничить прямой доступ к узлам?

Как ограничить прямой доступ к узлам, но просто разрешить представлениям получить доступ к требуемому полю определенного типа узла?

Например, в представлении «Слайды-шоу» мы сдвигаем поле изображения, относящееся к определенному типу узла. Но мы не хотим, чтобы поисковые системы получали доступ к & посетители доступа к узлам относятся к этому типу узла.

Любые предложения?

12 голосов | спросил Fahad 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2011 01:12:42 +0400 2011, 01:12:42

6 ответов


3
  

Если мы отменим публикацию узлов, добавленных пользователем1, они не будут редактироваться никакими   другого пользователя, даже если пользователь имеет право редактировать содержимое   этот тип содержимого.

Ограничить просмотр страницы узла - лучший способ ограничить прямой доступ к любым узлам определенного типа контента.

Использование также довольно просто, вам просто нужно включить этот модуль и настроить разрешения для узлов, которые доступны напрямую, как обычно.

http://drupal.org/project/restrict_node_page_view

На странице проекта:

  

Вы когда-нибудь использовали нодтипид слайд-шоу, который нужно опубликовать   но не хотите, чтобы узел был доступен сам, используя then node /XXX   дорожка? Этот модуль для вас!

     

С помощью этого модуля вы можете отключить прямой доступ к страницам узлов   (узел /XXX) на основе nodetypes и разрешений.

     

Включите модуль и не забудьте настроить свои разрешения.

ответил Fahad 9 MaramSat, 09 Mar 2013 10:30:24 +04002013-03-09T10:30:24+04:0010 2013, 10:30:24
12

Простым решением было бы не публиковать узлы, которые вы не хотите быть доступными. Представления могут по-прежнему извлекать данные из этих узлов.

ответил googletorp 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2011 10:11:29 +0400 2011, 10:11:29
1

Другой модуль, который делает то же самое, но с большей функциональностью.

Отверстие кролика

Сопровождающие этого проекта попросят «Ограничить просмотр страниц узла», чтобы объединить проекты в проблемах.

Преимущества против «Ограничить просмотр узлов узла»:

  • Такая же основная функциональность на узле, но расширяемая для пользователей /файлов /таксономии.
  • Может использоваться в вашем модуле
  • Может быть глобальным по типу контента или по каждому контенту
  • Подробнее на странице проекта ...

Недостаток против «Ограничить просмотр страниц узла»:

  • Больше кода, поэтому, возможно, менее эффективно (нужны тесты, не доказанные)
ответил Payou 10 FebruaryEurope/MoscowbMon, 10 Feb 2014 14:13:04 +0400000000pmMon, 10 Feb 2014 14:13:04 +040014 2014, 14:13:04
1

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

hook_node_access () , node_access ()

ответил gauravjeet 10 FebruaryEurope/MoscowbMon, 10 Feb 2014 14:45:39 +0400000000pmMon, 10 Feb 2014 14:45:39 +040014 2014, 14:45:39
0

Вдохновленный https://www.drupal.org/project/restrict_node_page_view , вы можете написать небольшой модуль:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
ответил leymannx 19 PM000000120000004931 2015, 12:16:49
0

Используя модуль Rules , вы можете реализовать правило, похожее на это:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Приведенное выше правило не учитывает (пока) принимать только действие «действия» только для выбранных ролей (например, чтобы админы могли использовать эти пути для просмотра узла). Но для любого, кто немного знаком с модулем Rules, это прямое «Условие» для добавления ...

Чтобы поэкспериментировать с этим правилом на своем собственном сайте, просто скопируйте весь код правил выше и вставьте его в новое правило на своем собственном сайте, созданном с помощью функции «Импорт». Затем дополнительно отредактируйте /уточните, чтобы он соответствовал вашей собственной среде (например, сообщение «Извините, ...»).

ответил Pierre.Vriens 26 Jpm1000000pmThu, 26 Jan 2017 16:40:44 +030017 2017, 16:40:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132