SUPEE-6285適用後およびMagento Community Edition 1.9.2.0以降で頻発するトラブルと対処法
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
先日リリースされたMagento Community Edition 1.9.2.0と過去バージョンに対するセキュリティパッチ・SUPEE−6285を適用した1.9.1.1以前のバージョンでは、それまで発生しなかったトラブルが起きることがあります。
このエントリでは発生するトラブルの内容とその原因・対処法について解説します。
発生するトラブルとは
SUPEE−6285の適用後、またはMagento Community Edition 1.9.2.0以降では、利用できる機能に制限のある管理ユーザーが、許可されているはずの機能にアクセスすると、「アクセス拒否」というメッセージが画面上に表示されることがあります。
なぜ、「アクセス拒否」と表示されるのか
Magentoの管理ユーザーは、あらかじめ定義された権限に基づいて、機能にアクセスできるかどうかが判断されます。
Magento Community Edition 1.9.2.0以前もしくはSUPEE−6285未適用の環境では、管理者権限のチェックを行っている Mage_Adminhtml_Controller_Action の _isAllowed メソッドの処理は以下のようになっています。
protected function _isAllowed() { return true; }
これに対し、パッチ適用後もしくはMagento Community Edition 1.9.2.0以降では同じ処理は以下のようになっています。
protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('admin'); }
Mage_Admin_Model_Session に定義されている isAllowed メソッドは、管理者権限の定義を参照して、その機能にアクセスできるかどうかを判定します。
引数に「admin」が与えられた場合、 admin_rule テーブルにある、 resource_id 列のデータが「admin」に完全一致するデータを検索し、アクセス許可か拒否かを判断します。権限を制限している場合は、このデータは deny になっているため、「アクセス拒否」とMagentoが判断してしまいます。
どのように対策すればよいのか
「アクセス拒否」となってしまう機能を管理している Controller クラスを探し、 _isAllowed メソッドの定義内容を確認します。
エラーになる場合は、以下の2通りの状況が考えられます。
- _isAllowed が定義がされていない
- 定義されているが、引数の値が適切ではない
前者の場合は、 _isAllowed を定義します。このとき、引数の値が適切ではないと意味がありません。
後者の場合、および前者の対策時に引数に与える値は、「admin」ではなく、「sales」や「customer」といった名称で始まる権限名を指定します。
「admin」を引数に与えると、すべての管理者権限をチェックしに行くので、権限を制限している場合は「アクセス拒否」になってしまいます。
弊社製エクステンションの対応について
現在弊社では、弊社製エクステンションの動作検証を進めております。
もし「アクセス拒否」などのメッセージが表示された場合は、ご一報ください。
- お知らせ (34)
- Magento Open Source (169)
- Adobe Commerce (86)
- Magentoトピックス (349)
- Magentoバージョンアップ (11)
- OroCommerce (1)
- AkeneoPIM (16)
- Shopware (26)
- 世界のプライバシー保護規制 (11)
- OroCRM (14)
- Typo3 (9)
- イベント (27)
- Mage-OS (1)
- エクステンションリリース情報 (75)
- Mautic (1)