Модуль переглядів: Як обмежити доступ користувачем


8

Я використовую модуль Views для створення представлення даних, до якого повинні мати доступ лише конкретні користувачі. Я знаю, що Перегляд включає в себе контроль доступу за роллю або дозволами, але мені потрібно щось більш тонке: в основному, я хочу мати змогу сказати лише користувачеві "х", а користувач "у" може отримати доступ до певного перегляду (або ще хтось із роль адміністратора сайту). Таким чином, це буде функціонувати дуже схоже на те, як ACL-модуль діє для окремих вузлів.

Чи найкращий підхід для створення плагіну доступу до власних подань? Я не маю великого досвіду з цим.

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

Будь-які ідеї? Або я роблю це складніше, ніж треба?

Спасибі, Бен


Можливо, вам доведеться написати плагін для доступу до перегляду, але якщо ви можете оновити своє запитання трохи детальніше, можливо, ви могли б досягти цього іншим способом. Що робить подання / відображення? Які користувачі можуть переглядати його? Чи мають користувачі різні ролі? Чи є у користувачів певне поле чи щось пов’язане з ними, що дозволяє їм отримати доступ до нього?
Джеймі Холлерн

Джеймі, дякую за відповідь. Насправді я також використовую Drupal Commerce, щоб створити унікальний вид інтернет-магазину. Як вкладка на кожному вузлі продукту (крім вкладок Перегляд та редагування), я хочу створити додаткову вкладку під назвою "Замовлення", яка була б представленням, на якому відображаються всі замовлення, що включали цей конкретний продукт. Постачальником конкретного товару є той користувач, якого я хочу мати змогу побачити перегляд "Замовлення" для цього товару.
БенК

Таким чином, постачальник може постійно контролювати збут своєї продукції. Але я не хочу надавати доступ усім, хто виконує роль "постачальника", тому що тоді будь-який постачальник може переглядати продукцію інших постачальників. Мати сенс? ;-)
Бенк

Відповіді:


5

Замість обмеження дозволів на Перегляд, ви можете обмежити дозволи на пункт меню, який веде до цього виду (будь то вкладка на вузлі або зворотний виклик меню). Ви можете створити свій погляд із лише екраном "За замовчуванням" та без відображення сторінки (тому користувачі не можуть просто визначити шлях до нього). Потім у вашому page callbackдля пункту меню просто зателефонуйте, views_embed_viewщоб відобразити подання. Схоже, обробка дозволів на пункт меню може бути простішою, ніж написання нового плагіна для переглядів (хоча плагін може бути корисним для інших).


Дякую за пропозицію! Я в кінцевому підсумку дотримувався цього загального підходу (який також запропонував Бердір), але створив референтне поле користувача на кожному вузлі під назвою field_usercanaccess. Мені вдалося скористатися moka_menu () та визначити зворотний виклик доступу, який переконався, що поточний користувач відповідав користувачеві, на який посилався. Інакше вкладка (та перегляд) не відображатиметься. Це чудово працює! :-)
БенК

@BenK дивовижно! Я радий, що ти щось працюєш. Для того, щоб допомогти зробити Drupal Answers чудовим ресурсом, ви також повинні проголосувати за відповіді (або питання), які вважаєте корисними. Тож ви, мабуть, повинні проголосувати за відповідь @ Бердира (і моя, але це не я, намагаючись отримати голоси, це намагається зробити відповіді Друпала кращим сайтом)
Chaulky

Дякую. :-) Я новачок у Stack Exchange і у мене лише 13 балів. Коли я намагаюся голосувати, він говорить, що мені потрібно 15 балів, щоб проголосувати. Тож якщо у когось є два бали (або я можу заробити їх іншим способом), я б точно проголосував за відповіді та запитання. --Ben
BenK

@BenK о так, я забув про 15-бальну межу. Ви завжди можете спробувати відповісти на запитання ... Один висновок на вашу відповідь отримує 10 повторень.
Chaulky

6

Спробуйте модуль зворотного виклику Views .

Забезпечує управління доступом на основі зворотного дзвінка для переглядів.

Доступні функції зворотного виклику визначаються модулями, що використовують hook_views_access_callbacks()функцію (так само, як і в hook_perm()), а потім можуть бути встановлені в конфігурації "Обмеження доступу" в представленні.


Використання зворотного виклику доступу перегляду чудово працює за винятком дивної фатальної помилки. Дивіться тут: drupal.stackexchange.com/questions/3336 / ... . Здається, шлях - але як це виправити?
Druvision

2

Я, мабуть, чогось не вистачаю, але здається, ви створили б нову роль і додали цих Користувачів. Потім скористайтеся функцією "Доступ до перегляду: роль".

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

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

Джеррі


1

Як щодо використання модуля користувальницьких дозволів для створення деяких нових дозволів спеціально для вашої мети, а потім за допомогою модуля User Permissions для призначення цих нових дозволів окремим користувачам?

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


Це цікава пропозиція використовувати спеціальні дозволи. Я не бачив цього модуля, оскільки він став ширшим, ніж просто дозволи на налаштування сайту. Єдине ускладнення тут полягає в тому, що я роблю все це в Drupal 7 (а офіційного відділення поки немає). Але якщо мені вдасться це зробити, можливо, можна вказати дозвіл у контролі доступу безпосередньо в представленні даних (не потребуючи модуля дозволів користувача). Дякую за пропозицію! :-)
БенК

Я спробую це і звіту.
БенК

0

Правильно, це має більше сенсу. Я думаю, ви могли (можливо, не на 100% впевнені) використовувати View і аргумент. Встановіть аргумент як ідентифікатор користувача, узятий з поточно зареєстрованого користувача, і аргумент за замовчуванням не відображає нічого. Це має бути в змозі зробити це, хоча я не знаю, наскільки це було б справедливо. Якщо ви спробуєте це, відправте відгук і повідомте мені про ваш прогрес.


Так, я спробую справи і звіту. Я також намагаюся плагін доступу до перегляду з аргументом, тому ми побачимо, як це відбувається. Дякую.
БенК

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