Відключити веб-сайт для всіх, крім користувачів, які не ввійшли в систему


11

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

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

Чи є простий спосіб це зробити? Або супер дивовижний плагін, який робить це? Досі мої пошуки були марними. Однак це може бути лише моїм вибором ключових слів у JED / Google.


поставити ваш сайт офлайн у глобальну конфігурацію?
web-tiki

Це буде дещо працювати, але ця функція не призначена для цього, тому мені доведеться возитися з групами користувачів і подібними, так як я використовую суворий OAuth для входу (не користувачі), групи користувачів не легко додавати в нього.
Джордан Рамстад

Відповіді:


14

Була б одна з цих робіт?

Тільки для членів (від JED)

Тримайте сторонні очі далеко від частини або всього веб-сайту, поки вони залишаються анонімними. За бажанням ви можете дозволити відвідувачам безпосередньо зареєструватися на вашому веб-сайті з або без необхідності вводити код запрошення.

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

Зареєстрований лише плагін обмежує доступ до сайту Joomla лише зареєстрованим користувачам.

Коли гість намагається отримати доступ до будь-якого вмісту Joomla, його переспрямовують на сторінку входу.


1
Зареєстрований лише, здається, працює як шарм :)
Джордан Рамстад

5

1) Використовуйте вбудований ACL Joomla!

Я рекомендую замовчувати своїх відвідувачів на сторінці входу та використовувати вбудований ACL Joomla! За допомогою зареєстрованих користувачів.

Встановіть пункт «Меню верхнього рівня» з дозволами для зареєстрованих користувачів - і тоді кожен елемент меню на цьому дереві буде видимим і доступним лише для зареєстрованих користувачів.

У Joomla є чудовий підручник з ACL ! Документи

Однак файли та документи все ще можуть завантажуватися нереєстрованими користувачами (тобто, якщо вони мають пряме посилання).

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

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

Найпростіший спосіб захисту вашого сайту - захист паролем вашого каталогу через .htaccess /

Це неелегантно, але якщо ви, наприклад, використовуєте cPanel, перейдіть у розділ Безпека -> Захищені паролем каталоги та використовуйте майстра, щоб називати каталоги, додавати чи видаляти користувачів та призначати цих користувачів до Захищеного паролем каталогу - ви можете дати кожному користувачеві унікальне ім’я і пароль.

Це не елегантно, але просто і використовується досить часто на практиці - однак, я повторюю, напевно, найкраще використовувати ACL, а якщо захистити документи від завантаження, розширення третьої сторони.

Якщо ви зберігаєте свої файли / документи в папці, захищеній паролем, вони також будуть захищені - вимагаючи, щоб користувач з дозволом намагався спочатку отримати доступ до цього каталогу для входу.


3

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

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

Потім я переоцінив offline.phpфайл у своєму шаблоні, щоб він виглядав більше схожим на сторінку входу в стилі екстранет, а не на сторінку за замовчуванням "Цей сайт офлайн".


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 Додатковим кроком є ​​встановлення доступу до меню "Зареєстровано" щоразу, коли ви створюєте пункт меню. Найпростішим рішенням було б мати можливість встановити рівень доступу до меню за замовчуванням, а не просто за замовчуванням "Загальнодоступне". Якщо ви можете встановити його за замовчуванням на "Зареєстровано", розширення не потрібно.
Девід Фрітш

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 поточного шаблону

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