ログインしているユーザーを除くすべてのユーザーに対してWebサイトを無効にする


11

これを行う方法はたくさんありますが、深く考えると、サイトをグローバルに無効にするのは難しいかもしれません。

ユーザーがWebサイトにアクセスすると、どこにいてもログインページにリダイレクトされます。ページのすべてのメニュー項目やその他の領域で特別な設定を必要としない方がいいと思います。

これを行う簡単な方法はありますか?またはこれを行う超素晴らしいプラグイン?これまでの私の検索は無駄になっています。しかし、それはJED / Googleでの私のキーワードの選択かもしれません。


グローバル構成でサイトをオフラインにしますか?
web-tiki 2014年

これは多少は機能しますが、この機能はこれには適していません。そのため、ユーザーグループなどをいじる必要があります。ログインに厳密なOAuthを使用しているため(ユーザーなし)、ユーザーグループを簡単に追加することはできません。
ジョーダンラムスタッド2014年

回答:


14

これらの1つは機能しますか?

会員限定(JEDより)

匿名のままで、ウェブサイトの一部または全体から目を離してください。必要に応じて、訪問者が招待コードを必要とせずにWebサイトに直接登録できるようにすることができます。

registeredOnly(JEDから)

registeredOnlyプラグインは、Joomlaサイトへのアクセスを登録ユーザーのみに制限します。

ゲストがJoomlaコンテンツにアクセスしようとすると、ログインページにリダイレクトされます。


1
登録されただけが魅力のように機能するようです:)
ジョーダン・ラムスタッド

5

1)Joomla!の組み込みACLを使用する

訪問者をデフォルトでログインページに設定し、登録ユーザーを使用してJoomla!の組み込みACLを使用することをお勧めします。

登録ユーザーへのアクセス許可を持つトップレベルメニュー項目を設定すると、そのツリーの各メニュー項目は登録ユーザーにのみ表示され、利用可能になります。

JoomlaのACLに関する優れたチュートリアルがあります!ドキュメント。

ただし、ファイルやドキュメントは、未登録のユーザーが直接ダウンロードできます(つまり、直接リンクがある場合)。

この場合、Akeeba Release SystemsやSobiProなどのドキュメントを保護するには、サードパーティの拡張機能を使用する必要があります。

2)パスワードで保護されたディレクトリ

サイトを保護する最も簡単な方法は、.htaccess /を使用してディレクトリをパスワードで保護することです。

これは洗練されていませんが、たとえばcPanelを使用している場合は、[セキュリティ]-> [パスワードで保護されたディレクトリ]に移動し、ウィザードを使用してディレクトリに名前を付け、ユーザーを追加または削除して、それらのユーザーをパスワードで保護されたディレクトリに割り当てます。各ユーザーに一意の名前を付けることができます。とパスワード。

それは洗練されていませんが、シンプルで実際にはかなり頻繁に使用されます。ただし、繰り返しますが、ACLを使用するのがおそらく最善で、ドキュメントをダウンロードから保護する場合は、サードパーティの拡張機能を使用します。

ファイル/ドキュメントをパスワードで保護されたディレクトリに保存すると、それらも保護されます。最初にログインするには、そのディレクトリにアクセスする権限を持つユーザーが必要です。


3

私はクライアントにJoomlaを使用してエクストラネットを作成するように要求しましたが、これはできる限り厳密に「ロックダウン」する必要がありました。これを行うには、グローバル構成でサイトをオフライン設定し、ACLを編集して、オフラインアクセス権限を作成した1つのカスタムユーザーグループを作成しました。

ログインにOAuthを使用しているとコメントに記載されていますが、これを支援する一部の拡張機能は、ユーザーをユーザーグループに自動的に追加するように構成できるため、この機能を使用して、構成されたグループにユーザーを追加できます。上記の指示。

次にoffline.php、テンプレートのファイルを上書きして、デフォルトの[このサイトはオフラインです]ページではなく、エクストラネットスタイルのログインページのように見せかけています。


3

@Bryanの回答に基づいて、これに対する私の回答を提供します。

メンバーは、唯一の非常に有望ないので、その上ノーコメントルックスをプラグイン。

registeredOnlyのプラグインは、私がフォークし、それを再書き込み、廃止予定のコードを削除する自由を取ったように、しかし私は、コードに感銘を受けていなかった、自由です。

それに加えて、コミュニティビルダーのサポートを削除しました。

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
ユーザーがログインしていなければ、ログイン以外のメニュー項目は表示されないので、質問で述べたように、可能な場合は追加の手順を避けたいと思います。
ジョーダンラムスタッド2014年

1
メンバーがサイトのアドレスにアクセスしたときに、ログインページをデフォルトにすることができます。ログインすると、メニュー項目が表示されます。追加の手順はどこですか?ACLはこのために美しくセットアップされています。
NivF007 2014年

@ NivF007追加のステップは、メニュー項目を作成するたびにメニューアクセスを「登録済み」に設定する必要があることです。最も単純な解決策は、単に「パブリック」にデフォルト設定するのではなく、デフォルトのメニューアクセスレベルを設定できるようにすることです。デフォルトに「登録済み」に設定できれば、拡張は必要ありません。
David Fritsch 2014年

1
@DavidFritschメニューリンクの作成時に1つのパラメーターを設定するのは、それほど難しい作業ではありません。毎日新しいメニューリンクを追加するのではありません。
Adam B

1
@AdamBそれはうまくいくでしょう!次に、メニューモジュールをレベル2で開始するように設定します。1つのレイヤーだけが必要な場合。私の心には奇妙な解決策がありますが、可能であるべきです
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');

このコードを現在のテンプレートのindex.phpファイルに貼り付けます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.