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

Я работаю над сайтом Wordpress для клиента, который хочет внутреннюю 'интранет' для его сотрудников. Главные потребности:

  1. Передайте внутренние вещи
  2. Содержите важные документы компании
  3. Обеспечьте быстрый доступ к ресурсам сотрудникам.

Эта информация чувствительна и для сотрудников только. Они хотели бы, чтобы каждый сотрудник имел имя пользователя / пароль и только смог просмотреть информацию и документы, после того как они зарегистрированы.

Я видел эти плагины, и некоторым нравится он, но они кажутся ограниченными, и конечно они абсолютно устарели теперь:

Я знаю, что могу пароль - защищать отдельные сообщения / страницы. Могу я пароль защищать всю категорию сообщений или еще лучше пользовательский посттип? В основном я должен сгруппировать некоторые страницы / сообщения вместе при входе в систему. Информация является уязвимой, таким образом, это не может быть доступно, например, в канале RSS. Как я могу сделать это?

  • (Менее желательная) опция 1: имейте всю сборку Wordpress за стеной входа в систему
  • (Более желательная) опция 2: имейте просто внутренние страницы / сообщения за стеной входа в систему

Нижняя строка: я интересуюсь опцией 1, если бы это - легче ПУТЬ, но предпочло бы опцию 2. В настоящее время, после некоторого исследования, я только нахожу устаревшим плагины, которые помогают с этим и, может казаться, не находят надежный способ осуществить любой.Спасибо за помощь!

3
08.11.2012, 19:04
5 ответов

Возможно поместить проверку на соответствующих страницах архива и единственных страницах

Но одна вещь, необходимо определенно сделать наряду со всеми другими решениями Вас взятие, состоит в том, чтобы использовать the_posts фильтр. Это отфильтровывает сообщения, которые получает любой WP_Query. Вы получите массив объектов сообщения. Проверьте на условие и сбросьте объект, если это там. Этот предназначен для когда, если все другие решения обойдены. Это - последнее средство, если некоторый неизвестный плагин получает сообщения без Вас имеющий какую-либо идею об этом.

Другая вещь, которую необходимо использовать, pre_get_posts отфильтруйте, чтобы проверить переменные запроса и изменить их как требуется

Другой posts_where фильтр, используйте его для добавления другого, где пункт к mysql запрашивает

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

При использовании пользовательского типа сообщения это становится намного легче. Можно установить пользовательские возможности того post_type и затем дать те возможности только пользователям конкретной роли.

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

2
19.02.2020, 22:15

Можно установить видимость содержания на частный на определенных страницах, и это потребовало бы, чтобы у посетителей были вход в систему WordPress И уровни полномочий для просмотра содержания. То, что я, возможно, предложил бы, создают a template-intranet.php для страницы "Intranet" и добавляют пользовательское меню для страниц, которые являются частью интранет, таким образом, они могут быть перечислены на той странице. Необходимо было бы все еще установить все состояние страниц на Частный.

Обходное решение к созданию всех страниц Private интранет было бы в functions.php можно записать условное выражение, чтобы проверить, является ли текущая страница подстраницей страницы "Intranet" - если страница является подстраницей интранет, затем проверяют, зарегистрирован ли пользователь, и если они не, перенаправляют их, если не продвигаются.

1
19.02.2020, 22:15

Если Вы хотите вручную справиться с аутентификацией и перенести ее в аутентификацию WordPress, то @Rezen имеет верное представление. Я предпочел бы просто использовать определенный Шаблон Страницы или список Шаблонов Страницы для проверки на автора, все же.

Можно также посмотреть на "членский" плагин Justin Tadlock, он имеет много пользовательского ролевого управления, которое Вы могли усилить, вероятно.

1
19.02.2020, 22:15

Это старо - но здесь - как я решил эту проблему в конечном счете.

  1. Созданный пользовательский тип сообщения для Страниц Интранет.
  2. Добавленный "force_login" функционируют в functions.php
  3. Включенный функция входа в систему силы наверху всех необходимых файлов шаблона страницы.

Вы могли настроить это для разрешения только для определенных пользователей - например, с помощью "членского" плагина @jason упомянутый.

Код:

В functions.php

/* Require Authentication for Intranet */

function my_force_login() {
global $post;

if (!is_user_logged_in()) {
    auth_redirect();
    }
}    

Наверху страницы-intranet.php и single-intranet-pages.php

<?php my_force_login(); ?>

И... именно. Это работает.

Примечания по безопасности:

  • Я не знаю точно, почему, но я не думаю, что безопасность этого метода является абсолютно пуленепробиваемой.
  • Это работает на мою ситуацию, но сделайте еще некоторое рытье при необходимости в пуленепробиваемой безопасности.
  • См. ответ @Mridul ниже для получения дополнительной информации

Если у Вас есть простой метод для этого, которое более безопасно, оставьте его ниже, и я отмечу его как ответ.

2
19.02.2020, 22:15

Фильтры:

add_filter('template_include', 'theme_check_user_permissions', 1, 1);
add_filter('logout_url','theme_logout_redirect');
if(!current_user_can('edit_users')) add_filter( 'wp_die_handler', create_function('',"return 'theme_wp_die_handler';"));

Если пользователь не регистрируется, то перенаправьте к странице входа в систему на сайте (guest.php, никакая панель инструментов)

function theme_check_user_permissions($template) 
{
    return (is_user_logged_in() ? $template : TEMPLATEPATH.'/guest.php');
}

После перенаправления входа в систему к домашней странице

function theme_logout_redirect($url, $redirect = null)
{
    return $url.'&amp;redirect_to='.urlencode(get_bloginfo('url'));
}

Удалите wp, умирают страница (перенаправление для размещения)

function theme_wp_die_handler()
{
    wp_redirect(get_bloginfo('url'),307);
    exit;
}
1
19.02.2020, 22:15

Теги

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