ec-cube
ec-cube copied to clipboard
マスタデータのEntityを拡張すると、マスタデータ管理ページでテーブルを選択できなくなる問題の対策
概要(Overview・Refs Issue)
#5400 の修正
方針(Policy)
Proxyファイルのパスを生成する際、basename($sourceFile)ではなく、 $entityClass = substr($sourceFile, strlen($projectDir . '/src/Eccube/Entity/')); として$sourceFileから先頭の/var/www/ec-cube/src/Eccube/Entity/を除去するように 変更しました。
実装に関する補足(Appendix)
(1) basename()からsubstrに()よる部分的なパスの除去に変更になっていますが、 入力値である$sourceFileはRecursiveDirectoryIteratorにより生成されるデータであるため、directory traversalの問題は発生しないと考えます。
(2) 従来のコードではあらゆるファイルに対してProxyファイルのパスを生成して、 Proxyファイルの有無をチェックしていましたが、
$entityPath = $projectDir . '/src/Eccube/Entity/'; if (strpos($sourceFile, $entityPath) === 0) { }
のようにしてEntity配下のクラスについてのみProxyファイルのパスを生成して、 Proxyファイルの有無チェックが動作するように変更しています。
探索対象である$this->pathsは外部から指定できるので、 将来、['/var/www/ec-cube/src/Eccube/']のようにEntity以外のクラスも含むパスを 指定して呼び出された場合にも正しく動作させるためです。
テスト(Test)
(1) プラグインから Plugin/[Plugin code]/Entity/Master/DeviceTypeTrait.php のようにしてマスタデータのEntityを拡張し、 \Eccube\Doctrine\ORM\Mapping\Driver\AnnotationDriver::getAllClassNames() が返すクラス一覧に'Eccube\Entity\Master\DeviceType'が含まれるようになった ことを確認。
(2) 管理画面のマスタデータ管理のプルダウンにmtb_device_typeが表示されるようになったことを確認。
相談(Discussion)
マイナーバージョン互換性保持のための制限事項チェックリスト
- [ ] 既存機能の仕様変更はありません
- [ ] フックポイントの呼び出しタイミングの変更はありません
- [ ] フックポイントのパラメータの削除・データ型の変更はありません
- [ ] twigファイルに渡しているパラメータの削除・データ型の変更はありません
- [ ] Serviceクラスの公開関数の、引数の削除・データ型の変更はありません
- [ ] 入出力ファイル(CSVなど)のフォーマット変更はありません
レビュワー確認項目
- [ ] 動作確認
- [ ] コードレビュー
- [ ] E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
- [ ] 互換性が保持されているか
- [ ] セキュリティ上の問題がないか
- [ ] 権限を超えた操作が可能にならないか
- [ ] 不要なファイルアップロードがないか
- [ ] 外部へ公開されるファイルや機能の追加ではないか
- [ ] テンプレートでのエスケープ漏れがないか
Codecov Report
Merging #5401 (53fd424) into 4.1 (6c466ad) will increase coverage by
0.01%
. The diff coverage is100.00%
.
@@ Coverage Diff @@
## 4.1 #5401 +/- ##
============================================
+ Coverage 68.58% 68.59% +0.01%
- Complexity 6162 6164 +2
============================================
Files 463 463
Lines 25306 25310 +4
============================================
+ Hits 17356 17362 +6
+ Misses 7950 7948 -2
Flag | Coverage Δ | |
---|---|---|
E2E | 57.95% <100.00%> (+<0.01%) |
:arrow_up: |
Unit | 76.15% <100.00%> (+0.01%) |
:arrow_up: |
Flags with carried forward coverage won't be shown. Click here to find out more.
Impacted Files | Coverage Δ | |
---|---|---|
...e/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php | 76.47% <100.00%> (+2.00%) |
:arrow_up: |
...be/Service/PurchaseFlow/Processor/TaxProcessor.php | 73.77% <0.00%> (+3.27%) |
:arrow_up: |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update 6c466ad...53fd424. Read the comment docs.
当方でユニットテストを作成し、動作確認してみます
以下のE2Eテストを追加して検証しています。 https://github.com/nanasess/ec-cube/commit/4f7b5226b3a5228db11b80221342b3f4bc59c92a
本修正により、 Eccube\Entity\Master
配下の Entity に対して Schema Update が自動実行されないようです。
(手動で bin/console doctrine:schema:update --force
を実行すれば、正常動作することは確認済み)
https://github.com/nanasess/ec-cube/actions/runs/8532978876/job/23374978428#step:13:72