web-dev-qa-db-ja.com

カスタムコンポーネントビューへのアクセスを制限する方法

カスタムコンポーネントで、特定のビューを特定のユーザーグループのみに制限できるようにしたいと考えています。ビューの1つにメニュー項目を作成する場合、それは非常に簡単です。そのメニュー項目のアクセスレベルを選択するだけで完了です。

ここで、option = com_mycomponentを使用してURLに直接アクセスしようとした場合、または私のコンポーネントの内部リダイレクトのいずれかがItemidが割り当てられていないページに移動した場合に問題が発生します...その場合、必要なのはコンポーネント自体です。ユーザーグループをチェックして、そのページを表示できるかどうかを判断する...コードでそれを制限するにはどうすればよいですか?ユーザーのユーザーグループの単純なハードコードされたチェック?それとも、「標準的な」方法がありますか?

私はドキュメントをチェックしていて、これを見つけました:

http://docs.joomla.org/J2.5:How_to_implement_actions_in_your_code

しかし、それはユーザーができることのためのものであり、ユーザーが見ることができるもののためのものではありません。私はこのフォーラムのスレッドも見つけました:

http://forum.joomla.org/viewtopic.php?t=530721

最初のコードはかなり古いですが、最後にこれを使用することをお勧めします:

http://api.joomla.org/cms-3/classes/JUser.html#method_authorise

そのためにはどうすればよいですか? JUserでアクセスをテストできるように、ビューで生成されたメインオブジェクトのアセットを定義する必要がありますか?

前もって感謝します。

11
Isidro Baquero

コンポーネントにコントロールを送信する前に、カスタムコンポーネントへのすべてのリクエストを処理するシステムプラグインを作成できます。

すべてのアクセスチェックを実行するには、onAfterRouteイベントを使用します。

function onAfterRoute()
{
  $user = JFactory::getUser();
  $groups = $user->groups;

  $jinput = JFactory::getApplication()->input;
  $option = $jinput->get('option', '');
  $view   = $jinput->get('view', '');

  // place USER-GROUP related checking here
}
9
Nick

これは、ユーザーがどのグループに属しているかを確認する方法を示すために開始する必要があるコードです。

$user = JFactory::getUser();
$groups = $user->groups;
if($user->id) {
    echo $user->username.' is logged in<Br/>';
    if (isset($groups[8])) echo " - User is a Super User <Br/>";
    if (isset($groups[7])) echo " - User is an Administrator <Br/>";
    if (isset($groups[6])) echo " - User is an Manager <Br/>";
}else{
    echo 'Not logged in<Br/>';
}
4
GDP

おそらくこの質問への遅い答え。しかし、これが私が使用したものです:

メインのcontroller.phpファイルで、display関数を次のようにオーバーライドしました。

public function display($cachable = false, $urlparams = array())
{
        $user = JFactory::getUser();
        $app  = JFactory::getApplication();

        $view = $this->input->get('view');

        if ($view == 'someview' || $view == 'anotherview')
        {
            if ($user->get('guest') == 1)
            {
                $uri = JUri::getInstance();
                $this->setRedirect(
                        JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode($uri->toString())), $app->enqueueMessage(JText::_('COM_YOURCOMPONENT_LOGIN_REQUIRED'), 'warning')
                );

                return;
            }
         }

        parent::display($cachable, $urlparams);
 }
4
Sahil Purav