Маючи погляди, поважають ho_node_access


14

Я використовую, hook_node_access()щоб заборонити користувачам доступ до деяких вузлів на основі спеціальних критеріїв. Однак я не хочу, щоб цей вміст відображався в перегляді, який перераховує його, якщо користувач не переходить критерії. Чи є спосіб перегляду поглядів щодо hook_node_access()реалізації?


Якщо модуль Views насправді не поважає встановлений дозвіл на доступ hook_node_access(), слід зробити лише щось: змінити код модуля Views.
kiamlaluno

Я не думаю, що цей гак запускається до тих пір, поки вузол не буде завантажений повністю з node_load, тому, ймовірно, тому він все ще з’являється. Однак я почав працювати над плагіном фільтра, який використовуватиме той самий метод для фільтрації, який використовує реалізація hol_node_access () для блокування людей. Мені просто доведеться пам'ятати, щоб додати цей фільтр у всі свої погляди, і він повинен працювати. Я повернусь сюди з інформацією про неї, як тільки я закінчу, щоб інші могли бути доброзичливими.
нене

Гаразд, тому моє використання було таким: Клієнт хоче 10 рівнів доступу, застосовних для будь-якого вузла, і користувачі повинні мати можливість бачити всі вузли нижче рівня їх доступу. Це було легко вирішено за допомогою гачок_node_access для стандартного перегляду вузла. Однак, оскільки погляди цього не поважали, я створив контекстний фільтр із спеціальним кодом php для аргументу. Код php в основному повертав нижчі або рівні значення для рівня доступу користувачів (у відповідному синтаксисі, розділеному на,). Недолік цього рішення полягає в тому, що для кожного перегляду потрібна ця конфігурація.
нене

Я знайшов проблему для поглядів, яка стосується цієї проблеми, вона також стосується належного способу вирішення проблеми: drupal.org/node/1266388 .
нене

2
Якщо ви можете написати відповідь про те, як вирішити питання, це цілком прийнятно; як говорить merlinofchaos, модуль Views завантажує вузли, використовуючи запит до бази даних, і це є причиною, чому hook_node_access()реалізація не дотримується. Так як це "за задумом", звітування про обхід добре.
kiamlaluno

Відповіді:


6

У мене було те саме запитання деякий час тому тут .

hook_node_accessне розпізнає viewsабо menus. Його слід використовувати лише як останню лінію оборони.

Кращий спосіб керувати доступом до вузлів - це через hook_node_access_recordsі hook_node_grantsяк описано тут і тут .



1

Перегляди за допомогою SQL визначають вузли для відображення. На жаль, з міркувань продуктивності для Drupal просто не було б можливо здійснити node_load на всіх потенційних кандидатах, а потім зателефонувати на гачку_node_access на кожному з них. Уявіть подання, на якому зображені тисячі вузлів (особливо при використанні пейджера). Якщо логіка не виконується в SQL, то пейджери матимуть дуже незвичну функціональність, тому Drupal змушує вас робити це як згаданий рік, використовуючи записи доступу у вашій базі даних.

Зробити access_records - це набагато більша робота, але змусить її працювати з SQL. Тому я рекомендую використовувати існуючий модуль node_access, щоб вирішити свою функціональність, де це можливо, тому що він, ймовірно, буде реалізований за допомогою записів доступу і, таким чином, буде працювати з видами.

До речі, записи записів доступу зберігаються в таблиці node_access, як показано нижче: введіть тут опис зображення Через коментарі до кожного стовпця ви можете зрозуміти їх призначення. Подумайте про царину як про систему, що використовується для доступу до вузлів, і gid як групу в царині. Ця група може мати дозволи на перегляд, оновлення та видалення. Взагалі кожен модуль node_access визначає одну або кілька областей (іноді кілька модулів node_access також можуть працювати паралельно). У кожної сфери користувач має один або кілька дітлахів.

У Drupal до всіх запитів, що мають тег "node_access", автоматично буде додано певну логіку. Перегляньте документацію, щоб дізнатися більше про теги. Ця спеціальна логіка приєднується до таблиці "node_access" для кожної області і додає умову, що коли "gid" дорівнює одному з застосованих до користувача гідів, користувач має відповідний дозвіл.

Ця вся система дозволяє всім запитам правильно обробляти node_access, навіть рахувати запити і т. Д. Вона дуже потужна, але має більш високу криву навчання, що просто простий_ук_нод_аксес. По можливості, використання наявного модуля node_access може врятувати вас від усієї головного болю.

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