Desativar site para todos, exceto os usuários conectados


11

Eu sei que existem muitas maneiras de fazer isso, no entanto, quando penso profundamente, uma desabilitação global do site pode ser difícil.

O que eu quero é que quando um usuário acessa o site, ele é redirecionado para a página de login, não importa onde esteja. Eu preferiria não precisar de configurações especiais em todos os itens de menu ou outras áreas da página.

Existe uma maneira simples de fazer isso? Ou um plugin super impressionante que faz isso? Minhas pesquisas até agora foram em vão. No entanto, essa pode ser a minha escolha de palavras-chave no JED / Google.


colocar seu site offline na configuração global?
Web-tiki

Isso funcionaria um pouco, mas esse recurso não se destina a isso, então eu teria que mexer com grupos de usuários e coisas do tipo; portanto, como uso o OAuth estrito para grupos de usuários de login (sem usuários), não é fácil adicionar isso.
Jordan Ramstad

Respostas:


14

Um desses funcionaria?

Somente membros (do JED)

Mantenha os olhos curiosos afastados de parte ou de todo o site, enquanto eles permanecem anônimos. Opcionalmente, você pode permitir que os visitantes se registrem diretamente no seu site com ou sem a necessidade de um código de convite.

RegisteredOnly (do JED)

O plugin RegisteredOnly restringe o acesso ao site Joomla apenas para usuários registrados.

Quando um convidado tenta acessar qualquer conteúdo do Joomla, ele é redirecionado para a página de login.


1
Registrado só parece funcionar como um encanto :)
Jordan Ramstad

5

1) Use a ACL incorporada do Joomla!

Eu recomendo colocar os visitantes em uma página de login e usar a ACL interna do Joomla! Usando usuários registrados.

Defina um item de menu de nível superior com permissões para usuários registrados - e cada item de menu nessa árvore estará visível e disponível apenas para usuários registrados.

Há um excelente tutorial sobre ACL no Joomla! Docs.

No entanto, arquivos e documentos ainda podem ser baixados por usuários não registrados (ou seja, se eles tiverem o link direto).

Nesse caso, você precisará usar uma extensão de terceiros, se desejar proteger esses documentos, como Akeeba Release Systems ou SobiPro.

2) Diretórios protegidos por senha

A maneira 'mais simples' de proteger seu site é Proteger com senha o seu diretório via .htaccess /

É deselegante, mas se você usar o cPanel, por exemplo, vá para Segurança -> Diretórios Protegidos por Senha e use o assistente para nomear diretórios, adicionar ou remover usuários e atribuir esses usuários ao Diretório Protegido por Senha - você pode dar a cada usuário um nome exclusivo e senha.

É deselegante, mas simples e usado com bastante frequência na prática - no entanto, reitero, provavelmente é melhor usar o ACL e, se proteger os documentos do download, uma extensão de terceiros.

Se você mantiver seus arquivos / documentos no diretório Protegido por Senha, eles também serão protegidos - exigindo que um usuário com permissões tentando acessar esse diretório faça login primeiro.


3

Eu tinha um pedido do cliente para fazer uma extranet para eles usando o Joomla, que tinha que ser 'bloqueado' o mais estritamente possível. Fiz isso definindo o site como Off - line na Configuração Global e , em seguida, editei a ACL para dar a 1 grupo de usuários personalizado que criei a permissão de Acesso Off - line .

Percebo nos comentários que você menciona que está usando o OAuth para login - algumas extensões que ajudam com isso podem ser configuradas para adicionar automaticamente usuários a um grupo de usuários, para que você possa usar essa funcionalidade para adicioná-los ao grupo configurado conforme instruções acima.

Em seguida, substituí o offline.phparquivo no meu modelo para parecer mais uma página de login no estilo extranet, em vez da página padrão 'Este site está offline'.


3

Vou dar minha resposta para isso com base na resposta de @ Bryan.

O plugin Only Members parece muito promissor, portanto, nenhum comentário sobre isso.

O plugin RegisteredOnly é gratuito, no entanto, não fiquei impressionado com o código, então tomei a liberdade de bifurcar e reescrevê-lo e remover o código obsoleto.

Além disso, removi o suporte do Community Builder porque ... bem ... eu odeio o 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');
    }
}

Coloque-o também no Github: https://github.com/Joomla-StackExchange/registeredOnly

Espero que isso ajude alguns de vocês


0

Você pode definir a permissão de todos os links de menu como registrados, forçando o usuário a fazer login.


1
Como nenhum item de menu que não seja o login será mostrado sem que o usuário esteja conectado, eu preferiria evitar a etapa extra, se possível, como disse na pergunta.
Jordan Ramstad

1
Você pode usar como padrão a página de login quando os membros acessarem o endereço do site. Eles fazem login - os itens de menu aparecem. Onde está a etapa extra? A ACL é configurada de maneira lindíssima para isso.
NivF007

@ NivF007 A etapa extra é definir o acesso ao menu como "Registrado" toda vez que você cria um item de menu. A solução mais simples seria poder definir um nível de acesso ao menu padrão, em vez de apenas o padrão "Público". Se você pudesse defini-lo como "Registrado", nenhuma extensão seria necessária.
David Fritsch

1
@DavidFritsch Definir um parâmetro na criação de um link de menu não é exatamente um trabalho árduo. Não é como se você adicionasse novos links de menu todos os dias.
Adam B

1
@AdamB Isso funcionaria! E, em seguida, defina o módulo de menu para iniciar no nível dois. Se você queria apenas uma camada. Uma solução estranha em minha mente, mas deve ser possível
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');

cole esse código no arquivo index.php do seu modelo atual

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.