From eaac7c68c4d764e060fbe66fc85be9d5dd4e127d Mon Sep 17 00:00:00 2001 From: renshen <1005457301@qq.com> Date: Thu, 5 Nov 2026 19:38:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B7=B2=E6=9C=89=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=98=BE=E7=A4=BA=E8=B4=B9=E6=AF=94=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E5=85=A5=E5=8F=A3=20(#902)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Utilities/SidebarPermissions.php | 24 +++++++++++++++---- tests/Feature/Settings/NavigationTest.php | 29 +++++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/app/Utilities/SidebarPermissions.php b/app/Utilities/SidebarPermissions.php index 8f4d9038..38b3d5d7 100644 --- a/app/Utilities/SidebarPermissions.php +++ b/app/Utilities/SidebarPermissions.php @@ -66,13 +66,17 @@ class SidebarPermissions $settings = self::settings(); $userSubject = 'user_' . $user->id; if (in_array($userSubject, $settings['configured'] ?? [], true)) { - return self::normalizeAllowedKeys((array) ($settings['subjects'][$userSubject] ?? [])); + return self::withFinanceMonitoringAccess( + self::normalizeAllowedKeys((array) ($settings['subjects'][$userSubject] ?? [])), + ); } $groups = UserAccessGroup::forUser($user); if ($groups->isNotEmpty()) { - return self::normalizeAllowedKeys( - $groups->flatMap(fn ($group) => $group->page_permissions ?? [])->all() + return self::withFinanceMonitoringAccess( + self::normalizeAllowedKeys( + $groups->flatMap(fn ($group) => $group->page_permissions ?? [])->all() + ), ); } @@ -82,7 +86,19 @@ class SidebarPermissions return null; } - return self::normalizeAllowedKeys((array) ($settings['subjects'][$subject] ?? [])); + return self::withFinanceMonitoringAccess( + self::normalizeAllowedKeys((array) ($settings['subjects'][$subject] ?? [])), + ); + } + + /** @param list $allowed */ + private static function withFinanceMonitoringAccess(array $allowed): array + { + if (! in_array('fee-ratio-monitoring/overview', $allowed, true)) { + $allowed[] = 'fee-ratio-monitoring/overview'; + } + + return $allowed; } public static function hasLimitedDingTalkAccess(User $user): bool diff --git a/tests/Feature/Settings/NavigationTest.php b/tests/Feature/Settings/NavigationTest.php index 47515f5c..051732e5 100644 --- a/tests/Feature/Settings/NavigationTest.php +++ b/tests/Feature/Settings/NavigationTest.php @@ -6,6 +6,7 @@ use App\Models\Auth\Permission; use App\Models\Auth\Role; use App\Utilities\BusinessNavigation; use App\Utilities\SidebarMenu; +use App\Utilities\SidebarPermissions; use Tests\Feature\FeatureTestCase; class NavigationTest extends FeatureTestCase @@ -307,6 +308,34 @@ class NavigationTest extends FeatureTestCase ->assertSeeText('费比异常数据尚未接入'); } + public function testExistingRegularPermissionSetsInheritFeeRatioMonitoring(): void + { + $this->user->roles()->sync([Role::where('name', 'user')->firstOrFail()->id]); + $subject = 'role_user'; + setting()->set('system.sidebar_permissions', [ + 'configured' => [$subject], + 'subjects' => [$subject => [ + 'financial-risk-control/store-violation-alert', + 'financial-risk-control/process-statistics', + ]], + ]); + setting()->save(); + + $this->assertContains( + 'fee-ratio-monitoring/overview', + SidebarPermissions::allowedKeys($this->user), + ); + + $this->loginAs() + ->get(route('business.pages.show', [ + 'section' => 'financial-risk-control', + 'page' => 'store-violation-alert', + ])) + ->assertOk() + ->assertSee('/workspace/fee-ratio-monitoring/overview', false) + ->assertSeeText('费比异常数据监控'); + } + public function test_business_pages_render_menu_filter_and_open_page_tabs(): void { $this->loginAs()