SUPEE-6285のインストール後のアクセス拒否エラー


85

Magento 1.7.0.2ストアにSUPEE-6285パッチをインストールした後、選択的な権限(すべての権限ではない)を持つユーザーのすべてのカスタムモジュールにアクセスしようとすると、システムが「アクセス拒否」エラーを表示します。下のスクリーンショット。

ここに画像の説明を入力してください

ユーザーのアクセス許可はロールリソースで適切に設定されており、これらの設定が確実に行われるようにアクセス許可設定を再適用しました。

この問題は複数のカスタム拡張機能で再現されているため、機能していないのは単一の拡張機能ではありません。

ログアウト/ログインし、キャッシュをクリアして、コンパイラーが無効になっていることを確認しました。

誰でもこれをトラブルシューティングする方法を提案できますか?

回答:


129

ここに書かれているように

制限された管理者アカウントを使用している場合、サードパーティの拡張機能の一部のメニューがそれらに対して機能しなくなる可能性があります。のデフォルトの戻り値Mage_Adminhtml_Controller_Action::_isAllowed()がからに変更されたtrueためMage::getSingleton('admin/session')->isAllowed('admin')です。管理コントローラーでこのメソッドをオーバーライドしない拡張機能は、ACLを使用しないため、「ALL」特権が必要になりました。

唯一の解決策は、拡張機能にパッチを適用し、このメソッドをすべての管理コントローラーに追加することです。

protected function _isAllowed()
{
    return true;
}

または、実際にACLリソースが定義されている場合etc/adminhtml.xml

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

リソース識別子を決定する方法

これはどのadminhtml.xmlように見えるかです:

Mage_Setupの例(acl)

acl/resources/admin/children次のchildrenノードをスキップして、以下のノード名を取得します。

不足しているリソース識別子を作成する方法

<menu>定義のみがあり定義がない<acl>場合は、独自に定義することもできます(同じモジュール内にある必要はないため、サードパーティのファイルを変更する必要はありません)。

Mage_Setupの例(メニュー)

以下menuをすべてコピーしてacl/resources/admin/children<action>ノードを削除します。


自動修正

https://gist.github.com/raybogman/eec47237b8ef0d4dd0fdに SupportDesk.nuによる優れたコマンドラインツールがあります。

ほとんどの欠落した_isAllowed()呼び出しを非常にうまく処理しますが、難読化または暗号化されたソースファイルでコードが破損するため、結果を手動で確認する必要があります。


このソリューションをテストしたばかりで、「ダッシュボード」権限を付与しても違いはありません。「ダッシュボードの特権」は、役割リソースの下の「ダッシュボード」の許可と同じですか、これは別の場所ですか?
クリス

2
答えを更新しました。私はの設定を誤って解釈しました。admin実際には、すべての特権を持つユーザーに対してのみtrueを返します。
ファビアンシュメングラー

3
またはreturn true;でACLに何も定義されていない場合は、単にしないでください。代わりに、xmlファイルにアクセス許可を追加し、適切に確認します。見てくださいアラン・ストームのサイトこちらの権限を作成する上での情報のため。config.xmladminhtml.xml
ケル

カスタムモジュールでは正常に機能していますが、構成設定のセクションがある場合、このブロックへのアクセスをどのように与えることができますか?
mjdevloper

1
で構成されているルートのコントローラー<use>admin</use>。それらは通常拡張しMage_Adminhtml_Controller_Actionます。
ファビアンシュメングラー

2

サードパーティのモジュールの場合、adminhtmlコントローラーに以下のコードを追加するとうまくいきました。

protected function _isAllowed()

{
     return true;
}

-5

そのはず:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('system/config');
}

その場合、MagentoからACL設定を返します。Magento Core Teamが別のパッチで修正するのか、それともapp / code / localでグローバルな修正として修正するのか...


3
これは意図した動作ではありません。デフォルトでは、意図的に管理コントローラーを制限しました。そのため、実際には拡張ベンダーは今すぐ更新する必要があります。
ファビアンシュメングラー

1
それで、はい、それがあなたのために働く場合、それを修正しapp/code/localますが、ユーザーがアクセス権を持っている場合にのみACLなしでカスタム拡張機能を表示することはSystem > Configuration誰もが望むものではありません。
ファビアンシュメングラー

ソリューションは回避策であり、推奨されません!デフォルトでtrueを返すことができます(このパッチの前はadminコントローラーにあったので)。より良い解決策:アクセス制御リストを正しく構成します。
マティアスクライン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.