Désactiver le site Web pour tous les utilisateurs sauf ceux connectés


11

Je sais qu'il existe de nombreuses façons de le faire, mais quand je pense profondément, une désactivation globale du site peut être difficile.

Ce que je veux, c'est quand un utilisateur va sur le site, il est redirigé vers la page de connexion où qu'il se trouve. Je préférerais ne pas avoir besoin de paramètres spéciaux dans chaque élément de menu ou autre zone de la page.

Existe-t-il un moyen simple de procéder? Ou un plugin super génial qui fait ça? Jusqu'à présent, mes recherches ont été vaines. Cependant, cela pourrait être mon choix de mots clés dans JED / Google.


mettre votre site hors ligne dans la configuration globale?
web-tiki

Cela fonctionnerait quelque peu, mais cette fonctionnalité n'est pas destinée à cela, donc je devrais jouer avec les groupes d'utilisateurs et ainsi de suite, car comme j'utilise OAuth strict pour la connexion (aucun utilisateur), les groupes d'utilisateurs ne sont pas faciles à ajouter.
Jordan Ramstad

Réponses:


14

Est-ce que l'un de ces travaux?

Réservé aux membres (du JED)

Gardez les regards indiscrets loin d'une partie ou de l'ensemble de votre site Web, pendant qu'ils restent anonymes. Vous pouvez éventuellement autoriser les visiteurs à s'inscrire directement sur votre site Web avec ou sans avoir besoin d'un code d'invitation.

enregistréSeulement (Du JED)

registeredOnly plugin restreint l'accès au site Joomla aux utilisateurs enregistrés uniquement.

Lorsqu'un invité essaie d'accéder à un contenu Joomla, il est redirigé vers la page de connexion.


1
Enregistré ne semble fonctionner que comme un charme :)
Jordan Ramstad

5

1) Utilisez l'ACL intégré de Joomla!

Je recommande de rediriger vos visiteurs vers une page de connexion et d'utiliser la liste de contrôle d'accès intégrée de Joomla! En utilisant des utilisateurs enregistrés.

Définissez un élément de menu de niveau supérieur avec des autorisations pour les utilisateurs enregistrés - puis chaque élément de menu de cette arborescence sera uniquement visible et disponible pour les utilisateurs enregistrés.

Il y a un excellent tutoriel sur ACL dans Joomla! Docs.

Cependant, les fichiers et documents peuvent toujours être téléchargés par des utilisateurs non enregistrés (c'est-à-dire s'ils disposent du lien direct).

Dans ce cas, vous devrez utiliser une extension tierce, si vous souhaitez protéger ces documents, tels que Akeeba Release Systems ou SobiPro.

2) Répertoires protégés par mot de passe

La façon la plus simple de protéger votre site consiste à protéger votre répertoire par mot de passe via .htaccess /

C'est inélégant, mais si vous utilisez cPanel, par exemple, allez dans Sécurité -> Répertoires protégés par mot de passe et utilisez l'assistant pour nommer les répertoires, ajoutez ou supprimez des utilisateurs et affectez ces utilisateurs au répertoire protégé par mot de passe - vous pouvez donner à chaque utilisateur un nom unique et mot de passe.

C'est inélégant, mais simple et utilisé assez souvent dans la pratique - cependant, je le répète, il est probablement préférable d'utiliser ACL et si vous protégez les documents contre le téléchargement, une extension tierce.

Si vous conservez vos fichiers / documents sous le répertoire protégé par mot de passe, ceux-ci seront également protégés - nécessitant un utilisateur disposant d'autorisations essayant d'accéder à ce répertoire pour se connecter en premier.


3

J'ai eu une demande d'un client pour créer un extranet pour eux en utilisant Joomla, qui devait être «verrouillé» aussi strictement que possible. Je l'ai fait en définissant le site sur Hors ligne dans la configuration globale , puis j'ai modifié la liste de contrôle d'accès pour donner à 1 groupe d'utilisateurs personnalisé j'ai créé l' autorisation d' accès hors ligne .

Je remarque dans les commentaires que vous mentionnez que vous utilisez OAuth pour la connexion - certaines extensions qui aident à cela peuvent être configurées pour ajouter automatiquement des utilisateurs à un groupe d'utilisateurs, vous pouvez donc utiliser cette fonctionnalité pour les ajouter au groupe configuré conformément à la ci-dessus les instructions.

J'ai ensuite remplacé le offline.phpfichier dans mon modèle pour qu'il ressemble davantage à une page de connexion de type extranet, plutôt qu'à la page par défaut «Ce site est hors ligne».


3

Je vais donner ma réponse sur la base de la réponse de @ Bryan.

Le plugin Members Only semble très prometteur, donc aucun commentaire à ce sujet.

Le plugin registeredOnly est gratuit, mais je n'ai pas été impressionné par le code, j'ai donc pris la liberté de le forger et de le réécrire et de supprimer le code obsolète.

En plus de cela, j'ai supprimé le support du Community Builder car .... eh bien ... je déteste le 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');
    }
}

Mettez-le également sur Github: https://github.com/Joomla-StackExchange/registeredOnly

J'espère que cela aide certains d'entre vous


0

Vous pouvez définir l'autorisation d'enregistrement de tous les liens de menu, forçant l'utilisateur à se connecter.


1
Comme aucun élément de menu autre que la connexion ne sera affiché sans que l'utilisateur ne soit connecté, je préférerais éviter l'étape supplémentaire si possible, comme je l'ai dit dans la question.
Jordan Ramstad

1
Vous pouvez accéder par défaut à la page de connexion lorsque les membres atteignent l'adresse de votre site. Ils se connectent - les éléments de menu apparaissent. Où est l'étape supplémentaire? ACL est magnifiquement configuré pour cela.
NivF007

@ NivF007 L'étape supplémentaire consiste à définir l'accès au menu sur "Enregistré" chaque fois que vous effectuez un élément de menu. La solution la plus simple serait de pouvoir définir un niveau d'accès au menu par défaut, au lieu de le définir par défaut sur "Public". Si vous pouviez le définir par défaut sur "Enregistré", aucune extension ne serait nécessaire.
David Fritsch

1
@DavidFritsch Définir un paramètre lors de la création d'un lien de menu n'est pas vraiment un travail difficile. Ce n'est pas comme si vous ajoutiez de nouveaux liens de menu chaque jour.
Adam B

1
@AdamB Cela fonctionnerait! Et puis définissez le module de menu pour commencer au niveau deux. Si vous vouliez un seul calque. Une solution étrange dans mon esprit mais qui devrait être possible
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');

collez ce code dans le fichier index.php de votre modèle actuel

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.