私はJoomlaコンポーネントを開発しており、管理者がフロントエンドの特定のビューへのアクセスを制限するオプションを持つことを望んでいます。
このビューのメニューアイテムを作成し、メニューからアクセスすると、ユーザーログインページが表示されます。すべて良い。
ただし、完全なURL(index.php?option=com_mycomponent&view=myRestrictedView
)を入力すると、そのビューに直接移動できます
残りのアクセス許可に対して現在のユーザーオブジェクトを確認するために、コントローラーにいくつかのコードを配置する必要があることに気付きましたが、どこから始めればよいかわかりません。 「MVCコンポーネントの開発」チュートリアルを見てきましたが、それはバックエンドに焦点を当てています。
[〜#〜] tldr [〜#〜]-ユーザーがこのビューに対して承認されているかどうかを確認するためにcontroller.php
に必要な承認コードと、どこに「設定」できるかこの認証レベル(config.xml
フィールドタイプaccesslevel
?)
最も簡単な方法は、私のconfig.xml
のaccesslevel
フィールドとJUser::getAuthorisedViewLevels
への呼び出しだと思いますが、少しハッキーに思えます...
最初に開始する場所はJoomlaです。Joomlaがそれを行う場合は、コードを読んでどのように実装されているかを確認できます。現在のACLモデルは、2.5ライン(1.6)の最初に導入されました。
Joomlaは、そのACL機能を「表示」と「実行」に分解します。あなたが尋ねているのはviewingです。
com_content
では、ArticleビューがビュークラスファイルContentViewArticle
のビューアクセスを次の基準でチェックすることがわかります。
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') == false && ($item->params->get('show_noauth', '0') == '0'))
{
JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR'));
return;
}
「モデルはすでに値を計算している」というコメントに気付くでしょう。この場合、モデルは/components/com_content/models/article.php
にあるContentModelArticle
です。 getItem()
メソッドの終わりに近づくと:
// Compute view access permissions.
if ($access = $this->getState('filter.access'))
{
// If the access filter has been set, we already know this user can view.
$data->params->set('access-view', true);
}
else
{
// If no access filter is set, the layout takes some responsibility for display of limited information.
$user = JFactory::getUser();
$groups = $user->getAuthorisedViewLevels();
if ($data->catid == 0 || $data->category_access === null)
{
$data->params->set('access-view', in_array($data->access, $groups));
}
else
{
$data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups));
}
}
もちろん、拡張機能によっては、JoomlaのACLに加えて、チェックする必要がある他の要件がある場合があります。ユーザーが「やっていること」を制御したいという非常に合理的な期待もあります。
ACLのより良いアイデアを得るための推奨される読み方は、おそらく "Access Control List" および "J25:Access Control List Tutorial"JoomlaのDocのWebサイト 。
@Craigの回答は非常に優れていますが、JERROR
はJoomla 4.0で廃止される予定です。 UIに通知する場合は、代わりに以下のコードを使用できます。
\Joomla\CMS\Factory::getApplication()->enqueueMessage($msg, 'warning')
私は http://component-creator.com/ を使用します。フロントエンドビューのACLは、生成されたすべてのコンポーネントに組み込まれています。