Отключить сайт для всех, кроме зарегистрированных пользователей

11

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

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

Есть ли простой способ сделать это? Или супер удивительный плагин, который делает это? Мои поиски до сих пор были напрасны. Однако это может быть мой выбор ключевых слов в JED / Google.

Джордан Рамстад
источник
поставить свой сайт в автономном режиме в глобальной конфигурации?
веб-тики
Это могло бы работать, но эта функция не предназначена для этого, поэтому мне пришлось бы связываться с группами пользователей и тому подобным, поэтому, поскольку я использую строгий OAuth для групп входа в систему (без пользователей), нелегко добавить в нее.
Джордан Рамстад

Ответы:

14

Будет ли один из этих работ?

Только для членов (от JED)

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

зарегистрировано только (от JED)

Плагин зарегистрированный только ограничить доступ к сайту Joomla только для зарегистрированных пользователей.

Когда гость пытается получить доступ к любому контенту Joomla, он перенаправляется на страницу входа.

Брайан Пит
источник
1
Регистрация только кажется, работает как шарм :)
Джордан Рамстад
5

1) Используйте встроенный ACL Joomla!

Я рекомендую по умолчанию вашим посетителям заходить на страницу входа и использовать встроенный ACL Joomla !, используя зарегистрированных пользователей.

Установите элемент меню верхнего уровня с разрешениями для зарегистрированных пользователей - и тогда каждый элемент меню в этом дереве будет видимым и доступным только для зарегистрированных пользователей.

В Joomla есть отличный учебник по ACL ! Docs.

Тем не менее, файлы и документы могут быть загружены незарегистрированными пользователями (то есть, если они имеют прямую ссылку).

В этом случае вам придется использовать стороннее расширение, если вы хотите защитить эти документы, такие как Akeeba Release Systems или SobiPro.

2) Защищенные паролем каталоги

Самый простой способ защитить ваш сайт - это защитить паролем ваш каталог через .htaccess /

Это не элегантно, но если вы используете, например, cPanel, перейдите в раздел «Безопасность» -> «Защищенные паролем каталоги» и используйте мастер для именования каталогов, добавления или удаления пользователей и назначения этих пользователей в каталог, защищенный паролем - вы можете дать каждому пользователю уникальное имя. и пароль.

Это не элегантно, но просто и довольно часто используется на практике - однако, повторюсь, вероятно, лучше всего использовать ACL и, если защищать документы от скачивания, стороннее расширение.

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

NivF007
источник
3

У меня была просьба клиента создать для них экстрасеть с использованием Joomla, которую нужно было «запереть» как можно точнее. Я сделал это, установив сайт в автономном режиме в глобальной конфигурации , затем отредактировал ACL, чтобы дать 1 пользовательской группе пользователей, я создал разрешение автономного доступа .

Я замечаю в комментариях, которые вы упоминаете, что вы используете OAuth для входа в систему - некоторые расширения, которые помогают с этим, могут быть настроены для автоматического добавления пользователей в группу пользователей, поэтому вы можете использовать эту функцию, чтобы добавить их в группу, настроенную согласно вышеуказанные инструкции.

Затем я переопределил offline.phpфайл в своем шаблоне, чтобы он больше походил на страницу входа в стиле экстрасети, а не на страницу по умолчанию «Этот сайт отключен».

codinghands
источник
3

Я собираюсь дать свой ответ для этого на основе ответа @ Брайана.

В пользователях только плагин выглядит очень не обещают, так что никаких комментариев по этому поводу .

RegisteredOnly плагин бесплатно, однако я не был впечатлен с кодом, так что я взял на себя смелость разветвление и переписывания его и удаление устаревшего кода.

В дополнение к этому я удалил поддержку Community Builder, потому что ... ну ... я ненавижу Community Builder:

defined('_JEXEC') or die('Restricted access');

class plgSystemRegisteredonly extends JPlugin
{
    public function onAfterRoute() 
    {
        $app   = JFactory::getApplication('site');
        $input = $app->input;
        $user  = JFactory::getUser();

        // Do nothing if in backend or user is logged in
        if ($app->isAdmin() || !$user->guest)
        {
            return;
        }

        // Get the component, view and task
        $option = $input->get('option');
        $view   = $input->get('view');
        $task   = $input->get('task');

        // If user is logging, registering or requesting user/pass, dont redirect
        if (($option == 'com_users') && (($task == 'login') || ($task == 'register_save') || ($task = 'remindusername') || ($task == 'requestreset')))
        {
            return;
        }

        // If user is at login form, registering or recovering user/password, dont redirect
        if (($option == 'com_users') && (($view == 'login') || ($view == 'reset') || ($view == 'remind') || ($view == 'register')))
        {
            return;
        }

        $app->redirect(JUri::base() . 'index.php?option=com_users&view=login', 'You must be logged in to access this site');
    }
}

Поместите его на Github тоже: https://github.com/Joomla-StackExchange/registeredOnly

Надеюсь, это поможет некоторым из вас

Лоддер
источник
0

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

Адам Б
источник
1
Поскольку никакой элемент меню, кроме входа в систему, не будет отображаться без входа пользователя в систему, я бы предпочел по возможности избежать дополнительного шага, как я сказал в вопросе.
Джордан Рамстад
1
Вы можете по умолчанию на страницу входа, когда участники попадают на адрес вашего сайта. Они входят - пункты меню появляются. Где дополнительный шаг? ACL настроен красиво для этого.
NivF007
@ NivF007 Дополнительным шагом является настройка доступа к меню «Зарегистрировано» при каждом создании элемента меню. Самое простое решение - установить уровень доступа к меню по умолчанию, а не просто установить значение по умолчанию «Public». Если бы вы могли установить для него значение по умолчанию «Зарегистрировано», расширение не понадобилось бы.
Дэвид Фрич
1
@DavidFritsch Установка одного параметра при создании ссылки меню не совсем тяжелая работа. Это не так, как вы добавляете новые ссылки меню каждый день.
Адам Б
1
@AdamB Это будет работать! А затем установите модуль меню для запуска на втором уровне. Если вы хотели только один слой. Странное решение в моем сознании, но оно должно быть возможным
Дэвид Фрич
-2
$haystack= JURI::current();
$needle = '/login';
$is_login_page = $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
if(JFactory::getUser()->guest && !$is_login_page && $_SERVER['HTTP_HOST'] != 'vauler.com' && $_SERVER['HTTP_HOST'] != '127.0.0.1:92')
    $app->redirect('index.php/login');

вставьте этот код в файл index.php вашего текущего шаблона

Канбото Мыктыбек
источник