Wyłącz witrynę dla wszystkich oprócz zalogowanych użytkowników


11

Wiem, że istnieje wiele sposobów, aby to zrobić, jednak gdy głęboko myślę, globalne wyłączenie witryny może być trudne.

Chcę, aby użytkownik odwiedzający witrynę przekierował go na stronę logowania bez względu na to, gdzie się znajduje. Wolałbym nie potrzebować specjalnych ustawień w każdym elemencie menu lub innym obszarze strony.

Czy istnieje prosty sposób to zrobić? Lub super niesamowita wtyczka, która to robi? Moje dotychczasowe poszukiwania poszły na marne. Jednak to może być mój wybór słów kluczowych w JED / Google.


umieścić swoją witrynę offline w konfiguracji globalnej?
web-tiki

To by działało trochę, ale ta funkcja nie jest przeznaczona do tego, więc musiałbym zadzierać z grupami użytkowników i tak dalej, więc ponieważ używam ścisłego protokołu OAuth do logowania (brak użytkowników), grupy użytkowników nie są łatwe do dodania.
Jordan Ramstad

Odpowiedzi:


14

Czy jeden z tych działałby?

Tylko członkowie (z JED)

Trzymaj wścibskie oczy z dala od części lub całej witryny, a jednocześnie zachowaj anonimowość. Opcjonalnie możesz zezwolić odwiedzającym na bezpośrednią rejestrację w witrynie za pomocą kodu zaproszenia lub bez niego.

registerOnly (z JED)

Tylko zarejestrowana wtyczka ogranicza dostęp do strony Joomla tylko dla zarejestrowanych użytkowników.

Gdy gość próbuje uzyskać dostęp do dowolnej zawartości Joomla, zostaje przekierowany na stronę logowania.


1
Zarejestrowany wydaje się działać jak urok :)
Jordan Ramstad

5

1) Użyj wbudowanej listy ACL Joomla!

Polecam domyślnym odwiedzającym stronę logowania i korzystanie z wbudowanej listy ACL Joomla !, przy użyciu Zarejestrowanych użytkowników.

Ustaw element menu najwyższego poziomu z uprawnieniami dla zarejestrowanych użytkowników - wtedy każda pozycja menu w tym drzewie będzie widoczna i dostępna tylko dla zarejestrowanych użytkowników.

W Joomla jest doskonały samouczek dotyczący ACL ! Dokumenty

Pliki i dokumenty mogą jednak nadal pobierać niezarejestrowani użytkownicy (tzn. Jeśli mają bezpośredni link).

W takim przypadku będziesz musiał użyć zewnętrznego rozszerzenia, jeśli chcesz chronić te dokumenty, takie jak Akeeba Release Systems lub SobiPro.

2) Katalogi chronione hasłem

„Najprostszym” sposobem ochrony witryny jest ochrona hasłem katalogu poprzez .htaccess /

Jest nieelegancki, ale jeśli na przykład używasz cPanel, przejdź do Bezpieczeństwo -> Katalogi chronione hasłem i użyj kreatora, aby nazwać katalogi, dodać lub usunąć użytkowników i przypisać tych użytkowników do katalogu chronionego hasłem - możesz nadać każdemu użytkownikowi unikalną nazwę i hasło.

Jest nieelegancki, ale prosty i dość często wykorzystywany w praktyce - jednak powtarzam, prawdopodobnie najlepiej użyć ACL i, jeśli chroni dokumenty przed pobraniem, rozszerzenie innej firmy.

Jeśli przechowujesz swoje pliki / dokumenty w katalogu chronionym hasłem, to one również będą chronione - wymagając od użytkownika uprawnień, które będą próbowały uzyskać dostęp do tego katalogu, aby się najpierw zalogować.


3

Miałem prośbę klienta o stworzenie dla nich ekstranetu za pomocą Joomla, który musiał zostać jak najściślej zablokowany. Zrobiłem to, ustawiając witrynę na Offline w konfiguracji globalnej , a następnie edytowałem listę ACL, aby nadać 1 niestandardowej grupie użytkowników, którą utworzyłem uprawnienie dostępu offline .

Zauważam w komentarzach, które wspominasz, że używasz OAuth do logowania - niektóre rozszerzenia, które pomagają w tym, można skonfigurować tak, aby automatycznie dodawały użytkowników do grupy użytkowników, dzięki czemu można było użyć tej funkcji, aby dodać ich do grupy skonfigurowanej zgodnie z powyżej instrukcji.

Następnie zastąpiłem offline.phpplik w moim szablonie, aby wyglądał bardziej jak strona logowania w stylu ekstranetu, a nie domyślna strona „Ta witryna jest offline”.


3

Dam na to odpowiedź w oparciu o odpowiedź @ Bryana.

W Members Only wtyczki wygląda bardzo obiecująco, więc żadnego komentarza w tej sprawie.

RegisteredOnly wtyczka jest za darmo, jednak nie byłem pod wrażeniem z kodem, więc wziąłem wolność rozwidlone i ponownego pisania i usunięcie kodu przestarzałe.

Oprócz tego usunąłem obsługę konstruktora społeczności, ponieważ ... no cóż ... Nienawidzę konstruktora społeczności:

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');
    }
}

Postaw to również na Github: https://github.com/Joomla-StackExchange/registeredOnly

Mam nadzieję, że pomoże to niektórym z was


0

Możesz ustawić uprawnienia wszystkich linków menu do zarejestrowania, zmuszając użytkownika do zalogowania się.


1
Ponieważ żadna pozycja menu inna niż login nie będzie wyświetlana bez zalogowania użytkownika, wolę unikać dodatkowego kroku, jeśli to możliwe, jak powiedziałem w pytaniu.
Jordan Ramstad

1
Możesz domyślnie przejść do strony logowania, gdy członkowie uderzą w adres Twojej witryny. Logują się - pojawiają się pozycje menu. Gdzie jest dodatkowy krok? ACL jest pięknie skonfigurowany do tego.
NivF007

@ NivF007 Dodatkowym krokiem jest ustawienie dostępu menu do „Zarejestrowany” za każdym razem, gdy tworzysz pozycję menu. Najprostszym rozwiązaniem byłoby ustawienie domyślnego poziomu dostępu do menu zamiast domyślnego ustawienia „Publiczny”. Jeśli możesz ustawić wartość domyślną na „Zarejestrowany”, rozszerzenie nie będzie potrzebne.
David Fritsch

1
@DavidFritsch Ustawienie jednego parametru przy tworzeniu łącza do menu nie jest ciężką pracą. To nie tak, że codziennie dodajesz nowe linki menu.
Adam B

1
@AdamB To by działało! A następnie ustaw moduł menu, aby zaczął na poziomie drugim. Jeśli chcesz tylko jedną warstwę. Dziwne rozwiązanie w mojej opinii, ale powinno być możliwe
David Fritsch

-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');

wklej ten kod do pliku index.php bieżącego szablonu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.