diff --git a/app/Utilities/FinanceLedgerAccess.php b/app/Utilities/FinanceLedgerAccess.php index 68ed953e..194ca1c8 100644 --- a/app/Utilities/FinanceLedgerAccess.php +++ b/app/Utilities/FinanceLedgerAccess.php @@ -21,6 +21,10 @@ class FinanceLedgerAccess return false; } + if (SystemAccess::roleName($user) === SystemAccess::ADMIN) { + return true; + } + $roles = array_values(array_filter(array_map( 'trim', explode(',', (string) config('finance_ledger.mapping_editor_roles', '财务台账管理员')), diff --git a/tests/Feature/Business/FinanceLedgerAccessTest.php b/tests/Feature/Business/FinanceLedgerAccessTest.php new file mode 100644 index 00000000..7d69a700 --- /dev/null +++ b/tests/Feature/Business/FinanceLedgerAccessTest.php @@ -0,0 +1,46 @@ +account('user'); + $admin = $this->account('admin'); + $superAdmin = $this->account('super_admin'); + + $this->assertFalse(FinanceLedgerAccess::canEditMapping($regularUser)); + $this->assertFalse(FinanceLedgerAccess::canEditAccountStatus($regularUser)); + $this->assertFalse(FinanceLedgerAccess::canEditAccountType($regularUser)); + + $this->assertTrue(FinanceLedgerAccess::canEditMapping($admin)); + $this->assertTrue(FinanceLedgerAccess::canEditAccountStatus($admin)); + $this->assertTrue(FinanceLedgerAccess::canEditAccountType($admin)); + + $this->assertTrue(FinanceLedgerAccess::canEditMapping($superAdmin)); + $this->assertTrue(FinanceLedgerAccess::canEditAccountStatus($superAdmin)); + $this->assertTrue(FinanceLedgerAccess::canEditAccountType($superAdmin)); + } + + private function account(string $role): User + { + $name = 'finance-ledger-access-' . $role . '-' . User::count(); + $user = User::create([ + 'name' => $name, + 'email' => $name . '@example.test', + 'password' => 'fixture-only-password', + 'enabled' => true, + 'locale' => 'zh-CN', + 'landing_page' => 'dashboard', + ]); + $user->roles()->attach(Role::where('name', $role)->firstOrFail()->id); + + return $user; + } +}