财务台账:允许管理员编辑台账 #429

Merged
shanshi merged 1 commits from feature/shanshi-admin-finance-edit into main 2026-10-21 14:29:03 +08:00
2 changed files with 50 additions and 0 deletions

View File

@ -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', '财务台账管理员')),

View File

@ -0,0 +1,46 @@
<?php
namespace Tests\Feature\Business;
use App\Models\Auth\Role;
use App\Models\Auth\User;
use App\Utilities\FinanceLedgerAccess;
use Tests\Feature\FeatureTestCase;
class FinanceLedgerAccessTest extends FeatureTestCase
{
public function test_super_admin_and_admin_can_edit_finance_ledger_but_regular_users_cannot(): void
{
$regularUser = $this->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;
}
}