From c8498183a1d4eca320cec8301bad6bb76c095c5a Mon Sep 17 00:00:00 2001 From: sakaguchi Date: Wed, 3 Jun 2026 23:26:41 +0900 Subject: [PATCH] =?UTF-8?q?fix=20#3012=20=E3=80=90API=E3=80=91BcUtil::isAd?= =?UTF-8?q?minSystem=20=E3=81=A7API=E7=B5=8C=E7=94=B1=E3=81=A7=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=97=E3=81=A6=E3=81=84=E3=82=8BURL=E3=81=8C?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2=E3=81=A7=E3=81=AF=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=A8=E5=88=A4=E6=96=AD=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/baser-core/src/Utility/BcUtil.php | 14 +++++++-- .../tests/TestCase/Utility/BcUtilTest.php | 29 +++++++++++++++---- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/plugins/baser-core/src/Utility/BcUtil.php b/plugins/baser-core/src/Utility/BcUtil.php index bed3249eb7..049279ba63 100644 --- a/plugins/baser-core/src/Utility/BcUtil.php +++ b/plugins/baser-core/src/Utility/BcUtil.php @@ -572,8 +572,18 @@ public static function isAdminSystem($url = null) return false; } } - $adminPrefix = BcUtil::getPrefix(true); - return (boolean)(preg_match('/^(|\/)' . $adminPrefix . '\//', $url) || preg_match('/^(|\/)' . $adminPrefix . '$/', $url)); + $baserCorePrefix = (string) BcUtil::getBaserCorePrefix(); + $adminAlias = Configure::read('BcPrefixAuth.Admin.alias') ?: '/' . BcUtil::getAdminPrefix(); + $apiAdminAlias = Configure::read('BcPrefixAuth.Api/Admin.alias') + ?: '/' . (string) Configure::read('BcApp.apiPrefix') . '/admin'; + + $prefixes = [ + $baserCorePrefix . $adminAlias, + $baserCorePrefix . $apiAdminAlias, + ]; + $prefixes = array_map(fn($prefix) => preg_quote(ltrim($prefix, '/'), '/'), $prefixes); + + return (bool) preg_match('/^\/?(?:' . implode('|', $prefixes) . ')(?:$|\/)/', $url); } /** diff --git a/plugins/baser-core/tests/TestCase/Utility/BcUtilTest.php b/plugins/baser-core/tests/TestCase/Utility/BcUtilTest.php index 784653bb5d..7e63679f0d 100644 --- a/plugins/baser-core/tests/TestCase/Utility/BcUtilTest.php +++ b/plugins/baser-core/tests/TestCase/Utility/BcUtilTest.php @@ -349,14 +349,26 @@ public function testClearModelCache() * * @param string $url 対象URL * @param bool $expect 期待値 + * @param string|null $apiPrefix APIプレフィックス * @dataProvider isAdminSystemDataProvider */ - public function testIsAdminSystem($url, $expect) + public function testIsAdminSystem($url, $expect, ?string $apiPrefix = null) { $this->loadFixtureScenario(InitAppScenario::class); - $this->getRequest($url); - $result = BcUtil::isAdminSystem(); - $this->assertEquals($expect, $result, '正しく管理システムかチェックできません'); + $currentApiPrefix = Configure::read('BcApp.apiPrefix'); + $currentApiAdminAlias = Configure::read('BcPrefixAuth.Api/Admin.alias'); + if ($apiPrefix !== null) { + Configure::write('BcApp.apiPrefix', $apiPrefix); + Configure::write('BcPrefixAuth.Api/Admin.alias', '/' . $apiPrefix . '/admin'); + } + try { + $this->getRequest($url); + $result = BcUtil::isAdminSystem(); + $this->assertEquals($expect, $result, '正しく管理システムかチェックできません'); + } finally { + Configure::write('BcApp.apiPrefix', $currentApiPrefix); + Configure::write('BcPrefixAuth.Api/Admin.alias', $currentApiAdminAlias); + } } /** @@ -371,6 +383,13 @@ public static function isAdminSystemDataProvider() ['baser/admin/hoge', true], ['/baser/admin/hoge', true], ['baser/admin/', true], + ['baser/api/admin', true], + ['baser/api/admin/hoge', true], + ['/baser/api/admin/hoge', true], + ['baser/api/admin/', true], + ['baser/rest/admin/hoge', true, 'rest'], + ['baser/api/admin/hoge', false, 'rest'], + ['baser/api', false], ['hoge', false], ['hoge/', false], ]; @@ -1545,7 +1564,7 @@ public function testIsSameReferrerAsCurrent($referer, $expected) public static function isSameReferrerAsCurrentDataProvider() { return [ - // refererがnullの場合  + // refererがnullの場合 [null, false], // referer!=$siteDomainの場合 ["/baser/admin", false],