Як обмежити прямий доступ до вузлів?


12

Як обмежити прямий доступ до вузлів, але просто дозволити представленням доступу до необхідного поля конкретного типу вузла?

Наприклад, у слайд-шоу "Views" ми ковзаємо поле зображення, яке належить до певного типу вузла. Але ми не хочемо, щоб пошукові системи отримували доступ, а відвідувачі отримували доступ до вузлів, що належать до цього типу вузлів.

Будь-які пропозиції?

Відповіді:


12

Простим рішенням буде не публікувати вузли, до яких ви не хочете бути доступними. Перегляди все ще можуть витягувати дані з цих вузлів.


1
Занадто просто? Не існує такого поняття, як "занадто просте рішення". Складність сама по собі не є ціллю, чи не так? Можливо, відповідь Googletorp не вирішує вашу конкретну проблему, але в такому випадку вам доведеться бути більш детальними і пояснити, чому ні.
marcvangend

@marcvangend Хоча вже пізно, але я зрозумів, що це не відповідь на моє запитання. Сподіваюсь, хтось може додати кращу відповідь
Фахад Ур Рехман

@Fahad Щоб отримати кращі відповіді, вам потрібно задати кращі запитання. Відповідь Googletorp виглядає як хороше рішення для мене, і результати роботи, схоже, згодні. Якщо це не вирішує вашу проблему, увійдіть і відредагуйте своє запитання, додавши всі релевантні дані.
marcvangend

@marcvangend насправді мою проблему було вирішено, і я прийняв відповідь раніше, але з огляду на ваш коментар. Googletorps має дуже високу репутацію, не має різниці, якщо я приймаю чи не приймаю його відповідь. Він надав чудове альтернативне рішення, за яке я також проголосував за нього.
Фахад Ур Рехман

@Fahad Прийнявши відповідь, яку ви говорите: ця відповідь вирішила мою проблему. Це потужне твердження і дуже корисне для відвідувачів, щоб дізнатись, чи корисна відповідь чи ні. Якщо моя відповідь не вирішила вашу проблему, то вам слід відредагувати своє запитання та опублікувати якусь детальну інформацію про те, чому моє рішення не працює для вас, і як сказав marcvangend, додайте детальніше.
googletorp

3

Якщо ми скасуємо публікацію вузлів, доданих користувачем1, вони не зможуть редагувати будь-який інший користувач, навіть якщо користувач має права редагувати вміст цього типу вмісту.

Обмежити перегляд сторінки вузла видається кращим способом обмежити прямий доступ до будь-яких вузлів певного типу вмісту.

Використання також досить просте, вам просто потрібно включити цей модуль і налаштувати дозволи для вузлів, які безпосередньо доступні як звичайні.

http://drupal.org/project/restrict_node_page_view

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

Ви коли-небудь використовували нодетип слайд-шоу, який потрібно опублікувати, але не хочете, щоб вузол був доступний сам, використовуючи шлях до вузла / XXX? Цей модуль для вас!

За допомогою цього модуля ви можете відключити прямий доступ до сторінок вузла (вузол / XXX) на основі нодетипів та дозволів.

Увімкніть модуль і не забудьте налаштувати свої дозволи.


1

Інший модуль, який робить те саме, але з більшою функціональністю.

Кроляча отвір

Обслуговуючі цього проекту просять "Обмежити перегляд сторінки вузла", щоб об'єднати проекти у проблеми.

Переваги перед "Обмежити перегляд сторінки вузла":

  • Основний функціонал у вузлі, але розширюється для користувачів / файлів / термінів таксономії
  • Може використовуватися у вашому модулі
  • Може бути глобальним для типу вмісту або для кожного вмісту
  • Детальніше на сторінці проекту ...

Недолік щодо "Обмежити перегляд сторінки вузла":

  • Більше код, можливо, менш ефективний (потрібні тести, не доведено)

1

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

гак_нод_акцепт () , node_access ()


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;
}

Цей модуль вже згадувався пару років тому. Чи можете ви пояснити, що нової вашої відповіді приносить темі?
Молот

@ Mołot - ... написати модуль самостійно. Відредагована відповідь.
leymannx

0

За допомогою модуля Правила ви можете реалізувати правило, схоже на це:

{ "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" } }
    ]
  }
}

Наведене вище правило ще не враховує застосування "дії" лише для вибраних ролей (наприклад, щоб адміністратори все ще могли використовувати ці шляхи для перегляду вузла). Але для кого-небудь трохи знайомого з модулем Правил, це прямий "Умова", який слід додати ...

Щоб поекспериментувати з цим правилом на власному веб-сайті, просто скопіюйте весь Кодекс правил вище та вставте його в нове правило на своєму власному сайті, створене за допомогою функції «Імпорт». Потім додатково відредагуйте / вдосконаліть, щоб він змістився у вашому власному середовищі (наприклад, повідомлення "Вибачте, ...", яке буде показано).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.