2009-10-26 2 views
2

Я пытаюсь найти простое решение конкретной проблемы, что позволяет блогерам на моем сайте управлять разрешениями на отдельные сообщения. Поэтому они могут решить, показывать ли их сообщения всем посетителям или только для пользователей, прошедших проверку подлинности.Предоставить пользователю ссылку «Изменить разрешения» на тип содержимого?

Самое близкое решение модуля, которое я нашел до сих пор, это Node Access module. Он подходит очень близко, но для меня это не совсем так, в том смысле, что он создает новую вкладку «грант» для типа контента, а затем отображает флажки со слишком большим количеством параметров разрешений (разрешить роль для просмотра, редактирования и delete), где я только хочу отобразить опцию , и мне нужно, чтобы она была расположена прямо на странице редактирования/создания контента, а не на отдельной вкладке.

Если я не могу найти альтернативное простое решение, мне придется добавить взломанный модуль блога или что-то в этом роде. Я не могу придумать другого способа сделать это.

Любые идеи?

ответ

4

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

  • TAC Lite позволяет связать словарь с схемой управления доступом. Каждый термин может быть связан с различными разрешениями на просмотр/редактирование прав для определенных пользователей или ролей пользователей.

    В этом случае вам понадобится один термин в сконфигурированном словаре. Установите его таким образом, чтобы этот термин («Ограниченный доступ») при установке ограничивал доступ только для аутентифицированных пользователей.

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

  • Content Access позволяет устанавливать правила контроля доступа по типу контента и переопределять узел. Я не могу говорить с пользовательским интерфейсом, поскольку я не использовал этот режим.

+0

+1 - Мы использовали TAC Lite в прошлом для чего-то подобного. Прямое решение, если не используются другие модули доступа к узлу. Подробнее см. Http://drupal.org/node/270000. –

+0

Спасибо за предложение Graiside. Очень полезная находка для других частей многоуровневого ролевого сайта, который я создаю. Я пока не вижу, как заставить его работать для этой конкретной проблемы, но будет продолжать экспериментировать. –

+1

Я предлагаю использовать одноязычный словарь с tac_lite для переключения запрета доступа к анонимным пользователям, когда этот термин привязан к любому данному узлу. Для этой цели он тяжелый, но быстрее, чем кодирование. – Grayside

0

В случае Graysides (хорошо) предложение не подходит, вы можете сделать это самостоятельно, без «взлома» модуля блога путем внедрения hook_nodeapi() и hook_form_alter() в пользовательском модуле:

  • На крючках " load ', вы можете добавить проверку для параметров текущего доступа к узлам, относящихся к анонимным и аутентифицированным пользователям. Вы добавили бы свойство для этого объекта узла (помните о потенциальных столкновениях имен), вы должны префикс имен пользовательских свойств в узле с именем вашего модуля).
  • Via hook_form_alter(), вы должны добавить элемент формы (например, радиокнопки) в формы редактирования узла для своих узлов блога, что позволяет пользователям выбирать видимость, по умолчанию используя новое свойство узла.
  • В insert и update операциях hook_nodeapi() вы должны снова проверить новое свойство и соответствующим образом настроить параметры доступа к узлам.

Обратите внимание, что такой подход может повлиять на другие действия модуля доступа к узлу, поэтому может потребоваться некоторое уточнение. Я не рекомендую его - я просто хотел предложить альтернативу «хакерскому ядру».

+0

Да, спасибо Хенрик. Я вижу, что нет необходимости менять код ядра. Пользовательский модуль выглядит в порядке. Я просто не совсем понимаю, как это происходит сейчас. Это очень помогло бы, если бы были примеры фрагментов на страницах API Drupal, например, на сайте PHP. Другая возможность, которая может быть большей моей скоростью, - вывести соответствующий код из других простых модулей доступа, чтобы создать нужные мне функции. –

+0

Да, это подход, основанный на использовании кода, если существующий модуль доступа не подходит. Я мог бы использовать Flag или CCK в качестве виджета формы, чтобы использовать преимущества всех модулей, которые они предоставляют (Views, Rules и т. Д.). – Grayside

Смежные вопросы